Hier ist ein ziemlich offensichtlicher rekursiver Sampler, der im besten Fall ist (in Bezug auf die Gewichte ), im schlimmsten Fall jedoch exponentiell.ω iO ( d)ωich
Angenommen, wir haben bereits und möchten auswählen . Wir müssen berechnen
und wähle mit der Wahrscheinlichkeit
Der Nenner ist für jede gültige Auswahl von Stichproben ungleich Null . x i w ( x 1 , … , x i - 1 , x ix1, … , X.i - 1xichx i = 1 w ( x 1 , … , x i - 1 , 1 )
w ( x1, … , X.i - 1, xich) = ∑xi + 1∈ { - 1 , 1 }⋯ ∑xd∈ { - 1 , 1 }( ∑j = 1dωjxj)+
xich= 1x1,…,xi-1w ( x1, … , X.i - 1, 1 )w ( x1, … , X.i - 1, 1 ) + w ( x1, … , X.i - 1, - 1 ).
x1, … , X.i - 1
Nun stellt sich natürlich die Frage, wie berechnet wird .w ( x1, … , X.ich)
Wenn wir das , dann für jedes mit führenden Einträgen , und so wird :
& ohgr; ⋅ x ≥ 0 x x 1 : i w Σ x i + 1 ⋯ Σ x d & ohgr; ⋅ xC.: = ∑ichj = 1ωjxj≥ ∑dj = i + 1| ωj|ω ⋅ x ≥ 0xx1 : iw
∑xi + 1⋯ ∑xdω ⋅ x= ω ⋅ ( ∑xi + 1⋯ ∑xdx )= ∑j = 1ichωj( ∑xi + 1⋯ ∑xdxj)2d- ichxj+ ∑j = i + 1dωj( ∑xi + 1⋯ ∑xdxj)0= 2d- ichC..
Im umgekehrten Fall, , haben wir das und damit .C.≤ - ∑dj = i + 1| ωj|ω ⋅ x ≤ 0w ( x1, … , X.ich) = 0
Andernfalls müssen wir mit .w ( x1, … , X.ich) = w ( x1, … , X.ich, 1 ) + w ( x1, … , X.ich, - 1 )
Angenommen, der Speicher ist kein Problem und wir können alle Unterberechnungen in , in einem Baum zwischenspeichern - bis zu dem Punkt, an dem wir einen der "netten" Fälle treffen, danach jeden Anrufe dauern konstant. (Wir müssen sowieso diesen ganzen Baum berechnen, um auszuwählen .) Sobald dieser Baum von Berechnungen erstellt ist, benötigt der Sampler nur noch Zeit. Die Frage ist, wie lange es dauert, den Baum zu bauen, oder wie groß er ist.w ( 1 )w ( - 1 )x1wO ( d)
Wir werden die "netten" Fälle natürlich schneller wenn die sortiert sind, .ωichω1≥ ω2≥ ⋯ ≥ ωd
Im besten Fall . Dann treffen wir sofort einen "schönen" Fall für entweder oder , so dass die Baumkonstruktion konstante Zeit benötigt und der gesamte Sampler Zeit benötigt.| ω1| > ∑dj = 2| ωj|w ( 1 )w ( - 1 )wO ( d)
Im schlimmsten (sortierten) Fall ist . Dann ist die Frage: Wie groß ist der Gesamtbaum?ω1= ω2= ⋯ = ωd
Nun, die ersten Pfade, die beendet werden müssen, sind natürlich und der Länge . Der Baum ist daher bis zu dieser Tiefe vollständig und enthält daher mindestens Knoten. (Es hat mehr; Sie können es wahrscheinlich mit einem Argument finden, wie es bei den Ruinenproblemen von Spielern verwendet wurde, aber ich konnte es in zwei Minuten Googeln nicht finden und es ist mir egal - ist schlecht genug....)( 1 , 1 , … , 1 )( - 1 , - 1 , … , - 1 )⌈ d/ 2⌉O ( 2d/ 2)2d/ 2
Wenn Ihre Einstellung nur wenige sehr große , ist dies wahrscheinlich ein einigermaßen praktischer Ansatz. Wenn die alle von ähnlicher Größe sind, ist es wahrscheinlich immer noch exponentiell und für große zu teuer .ω iωichωichd