これは、(重み観点から最良の場合はですが、最悪の場合は指数関数的なかなり明白な再帰サンプラーです。O(d)ωi
我々はすでに選択したと仮定し、と願いが選択する。を計算する必要があります
そしてを確率
分母は、サンプル有効な選択に対してゼロ以外になります。x1,…,xi−1xi
w(x1,…,xi−1,xi)=∑xi+1∈{−1,1}⋯∑xd∈{−1,1}(∑j=1dωjxj)+
xi=1w(x1,…,xi−1,1)w(x1,…,xi−1,1)+w(x1,…,xi−1,−1).
x1,…,xi−1
さて、もちろん、問題はどのようにを計算するかです。w(x1,…,xi)
我々が持っている場合、その、次に先行するエントリ持つ任意の、したがっては次のようになります:
C:=∑ij=1ωjxj≥∑dj=i+1|ωj|ω⋅x≥0xx1:iw
∑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≤0w(x1,…,xi)=0
それ以外の場合は、を使用して再帰する必要があります。w(x1,…,xi)=w(x1,…,xi,1)+w(x1,…,xi,−1)
メモリは問題ではなく、すべてのサブ計算を、でツリーにキャッシュできると仮定します。「nice」ケースの1つに到達するまで、その後呼び出しには一定の時間がかかります。(を選択するには、このツリー全体を計算する必要があります。)次に、この計算のツリーが構築されると、サンプラーは時間しかかかりません。問題は、ツリーを構築するのにどのくらいの時間がかかるか、またはそれと同じくらい大きいかどうかです。w(1)w(−1)x1wO(d)
もちろん、が並べ替えられている場合は、「素敵な」ケースに早くヒットします。です。ωiω1≥ω2≥⋯≥ωd
最良の場合は、です。次に、またはいずれかですぐに "nice"ケースにヒットするため、ツリーの構築には一定の時間がかかり、サンプラー全体では時間がかかります。|ω1|>∑dj=2|ωj|w(1)w(−1)wO(d)
最悪の(ソートされた)場合は、です。次に問題は、ツリー全体の大きさはどれくらいかということです。ω1=ω2=⋯=ωd
もちろん、最初に終了するパスはとの長さです。したがって、ツリーはその深さまで完成しているため、少なくともノードが含まれています。(それはもっとあります;ギャンブラーの破滅問題で使用されたもののような議論でおそらくそれを見つけることができますが、私はグーグルの2分間でそれを見つけることができず、特に気にしません– は悪いです足りる....)(1,1,…,1)(−1,−1,…,−1)⌈d/2⌉O(2d/2)2d/2
設定に非常に大きな少ししかない場合、これはおそらく実用的なアプローチです。もし同様の大きさの全てが、それは大規模なため、まだおそらく指数とあまりにも高価だ。ωiωid