여기 꽤 명백한 재귀 샘플러가 있습니다. O(d) 가장 좋은 경우 (무게 측면에서) ωi)이지만 최악의 경우 지수입니다.
우리가 이미 선택했다고 가정 x1,…,xi−1, 선택하고 싶다 xi. 우리는 계산해야합니다
w(x1,…,xi−1,xi)=∑xi+1∈{−1,1}⋯∑xd∈{−1,1}(∑j=1dωjxj)+
그리고 선택
xi=1 확률로
w(x1,…,xi−1,1)w(x1,…,xi−1,1)+w(x1,…,xi−1,−1).
분모는 샘플의 유효한 선택에 대해 0이 아닙니다.
x1,…,xi−1.
물론, 문제는 계산하는 방법입니다 w(x1,…,xi).
우리가 가지고 있다면 C:=∑ij=1ωjxj≥∑dj=i+1|ωj|그런 다음 ω⋅x≥0 어떠한 것도 x 주요 항목 x1:i, 그래서 w 된다 :
∑xi+1⋯∑xdω⋅x=ω⋅(∑xi+1⋯∑xdx)=∑j=1iωj(∑xi+1⋯∑xdxj)2d−ixj+∑j=i+1dωj(∑xi+1⋯∑xdxj)0=2d−iC.
반대의 경우 C≤−∑dj=i+1|ωj|우리는 ω⋅x≤0 그래서 w(x1,…,xi)=0.
그렇지 않으면, 우리는 w(x1,…,xi)=w(x1,…,xi,1)+w(x1,…,xi,−1).
메모리는 문제가 아니며 모든 하위 계산을 캐시에 넣을 수 있다고 가정합니다. w(1), w(−1)트리에서 – "좋은"사례 중 하나에 도달 한 시점까지 모든 통화는 일정한 시간이 걸립니다. (어쨌든이 전체 트리를 계산하여 선택해야합니다.x1.) 그런 다음이 나무가 w 계산이 이루어지고 샘플러는 O(d)시각. 문제는 트리를 구축하는 데 걸리는 시간 또는 그와 동등한 크기입니다.
우리는 물론 "좋은"사례를 더 빨리 칠 것입니다. ωi 정렬 ω1≥ω2≥⋯≥ωd.
가장 좋은 경우 |ω1|>∑dj=2|ωj|. 그런 다음 즉시 "좋은"사례를 발견했습니다.w(1) 또는 w(−1)그래서 w 나무 구조는 일정한 시간이 걸리고 전체 샘플러는 O(d) 시각.
최악의 (정렬 된) 경우 ω1=ω2=⋯=ωd. 그렇다면 문제는 전체 트리가 얼마나 큽니까?
글쎄, 종료하는 첫 번째 경로는 물론 (1,1,…,1) 과 (−1,−1,…,−1) 길이의 ⌈d/2⌉. 따라서 나무는 그 깊이까지 완성되므로 최소한O(2d/2)노드. (더 많은 것이 있습니다; 당신은 아마 도박꾼의 파멸 문제에 사용 된 것과 같은 논쟁으로 그것을 찾을 수 있지만, 나는 2 분의 인터넷 검색에서 그것을 찾을 수 없었고 특히 신경 쓰지 않았습니다. 2d/2 충분히 나쁘다 ...)
설정 값이 매우 큰 경우 ωi이것은 아마도 합리적으로 실용적인 접근법 일 것입니다. 만약ωi 모두 비슷한 크기이며, 아마도 여전히 지수적이고 너무 비쌉니다. d.