这是一个相当明显的递归采样器,在最佳情况下(权重)为,在最坏情况下为指数。ω 我Ø (d)ω一世
假设我们已经选择了并希望选择。我们需要计算
和选择的概率为
对于样本任何有效选择,分母将为非零。 X 我瓦特(X 1,... ,X 我- 1,X 我)= Σ X 我+ 1 ∈ { - 1 ,1 } ⋯ Σ X d ∈ { - 1 ,1 } (d Σ Ĵ = 1 ω Ĵ X Ĵ )X1个,… ,xi − 1X一世X 我 = 1 瓦特(X 1,... ,X 我- 1,1 )
w ^ (X1个,… ,xi − 1,X一世)= ∑X我+ 1∈ { - 1 ,1 }⋯ ΣXd∈ { - 1 ,1 }(∑j = 1dωĴXĴ)+
X一世= 1x1,…,xi−1w ^ (X1个,… ,xi − 1,1 )w ^ (X1个,… ,xi − 1,1 )+ w (x1个,… ,xi − 1,- 1 )。
X1个,… ,xi − 1
现在,当然,问题是如何计算。w ^ (X1个,… ,x一世)
如果我们有,那么对于任何带有,因此变为:
ω ·&X ≥ 0 X X 1 :我瓦特Σ X 我+ 1 ⋯ Σ X d ω ·&XC:= ∑一世j = 1ωĴXĴ≥ Σdj = i + 1| ωĴ|ω ·&X ≥ 0XX1 :我w
∑X我+ 1⋯ ΣXdω ·&X= ω ·& (ΣX我+ 1⋯ ΣXdX )= ∑j = 1一世ωĴ(∑X我+ 1⋯ ΣXdXĴ)2d− 我XĴ+ ∑j = i + 1dωĴ(∑X我+ 1⋯ ΣXdXĴ)0= 2d− 我C。
在相反的情况下,,我们得到,因此。C≤ - Σdj = i + 1| ωĴ|ω ·&X ≤ 0w ^ (X1个,… ,x一世)= 0
否则,我们必须使用递归。w ^ (X1个,… ,x一世)= w (x1个,… ,x一世,1 )+ w (x1个,… ,x一世,- 1 )
假设内存不是问题,并且我们可以将,所有子计算都缓存在树中–直到我们遇到了“ nice”情况之一之后,通话需要固定的时间。(无论如何,我们都需要计算整个树以选择。)然后,一旦构建了这计算树,采样器将仅花费时间。问题是建造树需要多长时间,或者等效地,它有多大。w (1 )w (− 1 )X1个wØ (d)
如果将排序为我们当然会更快地处理“ nice”情况。ω一世ω1个≥ ω2≥ ⋯ ≥ ωd
在最佳情况下,。然后我们立即为或命中一个“不错”的情况,因此树的构建需要恒定的时间,整个采样器需要时间。| ω1个| > ∑dj = 2| ωĴ|w (1 )w (− 1 )wØ (d)
在最坏的情况下,。那么问题是:总树有多大?ω1个= ω2= ⋯ = ωd
好吧,终止的第一个路径当然是长度为和。因此,树达到该深度为止是完整的,因此至少包含节点。(它有更多;您可能会找到与赌徒的破产问题中使用的参数类似的参数,但是我在谷歌搜索的两分钟内找不到它,也不必特别在意– 不好足够....)(1 ,1 ,... ,1 )(− 1 ,− 1 ,… ,− 1 )⌈ d/ 2⌉O (2d/ 2)2d/ 2
如果您的设置只有几个非常大的,那么这可能是一种合理实用的方法。如果大小都相似,则对于大来说,它可能仍然是指数级的并且太昂贵了。ω一世ω一世d