Lassen Sie uns zunächst zwei vielleicht offensichtliche, aber wichtige Annahmen machen:
_.random_item
kann die letzte Position wählen.
_.random_item
wählt jede Position mit der Wahrscheinlichkeit .1n+1
Um die Korrektheit Ihres Algorithmus zu beweisen, benötigen Sie ein induktives Argument ähnlich dem hier verwendeten :
- Für die Singleton-Liste gibt es nur eine Möglichkeit, daher wird sie einheitlich ausgewählt.
- Angenommen, die Liste mit Elementen wurde einheitlich ausgewählt (aus allen Permutationen), zeigen Sie, dass die mit Ihrer Technik erhaltene Liste mit Elementen einheitlich ausgewählt ist.n + 1nn+1
Ab hier ist der Beweis falsch. Einen korrekten Beweis finden Sie weiter unten. Ich lasse dies hier, weil sowohl der Fehler als auch die folgenden Schritte (die stichhaltig sind) lehrreich sein könnten.
Es ist nützlich, eine lokale (dh elementweise) Eigenschaft abzuleiten, die gelten muss, da es schmerzhaft ist, über die gesamte Permutation zu streiten. Beachten Sie, dass eine Permutation gleichmäßig gewählt wird, wenn jedes Element die gleiche Wahrscheinlichkeit hat, sich an jeder Position zu befinden, d. H
∀π∈PermnPr(L=π)=1n!⟺∀i=1n ∀j=1nPr(Li=j)=1n(1)
wound wir nehmen aus Gründen der Vereinfachung der Notation an, dass wir in die Liste einfügen .{ 1 , … , n }n=|L|{1,…,n}
Lassen Sie uns nun sehen, was Ihre Technik macht, wenn Sie das te Element einfügen . Wir müssen drei Fälle berücksichtigen (nach dem Tausch):n+1
- Eines der Elemente in der Liste, nicht vertauscht, dh undj ∈ { 1 , … , n }i∈{1,…,n}j∈{1,…,n}
- Eines der Elemente in der Liste ist vertauscht, dh undj ∈ { 1 , … , n }i=n+1j∈{1,…,n}
- Das neue Element, dh undj = n + 1i∈{1,…,n+1}j=n+1
Für jeden Fall berechnen wir die Wahrscheinlichkeit, dass sich das Element an Position ; alle müssen sich als herausstellen (was wegen ausreicht ). Sei die Wahrscheinlichkeit, dass sich eines der ersten Elemente an einer beliebigen Position in der alten Liste befindet (Induktionshypothese), und die Wahrscheinlichkeit von jede Position, die gewählt wird von (Annahmen 1, 2). Beachten Sie, dass der Koex der Liste mit Elementen und die Auswahl der Swap-Position unabhängige Ereignisse sind , sodass die Wahrscheinlichkeiten gemeinsamer Ereignisse zi 1ji (1)pn=11n+1(1) npn=1pn=1nn nps=1n+1random_item
n
Pr(Li=j,i swapped)=Pr(Li=j)⋅Pr(i swapped)=pnps
für . Nun zu den Berechnungen.i,j∈{1,…,n}
Wir betrachten nur die alten Elemente. Ein solches Element befindet sich an Positionjnjii
Pr(Li=j)=pn(1−ps)=1n⋅nn+1=1n+1
jjii
Pr(Ln+1=j)=∑i=1npnps=∑i=1n1n⋅1n+1=1n+1 .
Das neue Element landet genau dann an Position wenn als Swap-Position gewählt wurdeichii
Pr(Li=j)=ps=1n+1 .
Alles in allem hat sich herausgestellt, dass Ihre Einfügestrategie tatsächlich die Einheitlichkeit bewahrt. Induziert beweist dies, dass Ihr Algorithmus gleichmäßig verteilte Permutationen erzeugt.
Ein Wort der Warnung: Dieser Beweis bricht zusammen, wenn die eingefügten Elemente nicht paarweise unterschiedlich sind bzw. unterscheidbar, weil dann die allererste Gleichung nicht mehr gültig ist. Ihr Algorithmus ist jedoch weiterhin gültig. Jede Permutation mit Duplikaten wird durch die gleiche Anzahl zufälliger Ausführungen generiert. Sie können dies beweisen, indem Sie Duplikate markieren (dh sie unterscheidbar machen), den obigen Beweis durchführen und die Markierungen (virtuell) entfernen. Im letzten Schritt werden gleich große Sätze von Permutationen zu denselben reduziert.
Wie Steven in den Kommentaren richtig bemerkt hat, ist der obige Beweis von Grund auf fehlerhaft, da nicht zutrifft; Sie können Verteilungen auf der Menge der Permutationen konstruieren, die die rechte, aber nicht die linke Seite erfüllen¹.(1)
Daher müssen wir mit Permutationswahrscheinlichkeiten arbeiten, was sich schließlich als nicht so schlecht herausstellt. Die Annahmen zu random_item
und die induktive Struktur, die zu Beginn des Beitrags beschrieben wurden, bleiben bestehen, wir fahren von dort fort. Let die Liste bezeichnen , nachdem eingefügt wurde. { 1 , … , k }L(k){1,…,k}
Es sei eine beliebige Permutation von . Es kann eindeutig als geschrieben werdenπ′∈Permn+1{1,…,n+1}
π′=(π(1),π(2),…,π(i−1),n+1,π(i+1),…,π(n),π(i))
für einige und . Nach Induktionshypothese ist . Außerdem wird Position mit der Wahrscheinlichkeit angenommen. Da die zufälligen Entscheidungen von und (stochastisch) unabhängig sind, erhalten wirπ∈Permni∈{1,…,n+1}Pr(L(n)=π)=1n!random_item
i1n+1πi
Pr(L(n+1)=π′)=Pr(L(n)=π)⋅Pr(i swapped)=1(n+1)!
was wir zeigen mussten. Induziert beweist dies, dass Ihr Algorithmus gleichmäßig verteilte Permutationen erzeugt.
- Weisen Sie beispielsweise jede Permutation in Wahrscheinlichkeit und alle anderen . Es gibt auch Beispiele, die jeder Permutation eine Wahrscheinlichkeit ungleich Null zuweisen.1{(1,2,3,4),(2,3,4,1),(3,4,1,2),(4,1,2,3)} 0140