Innanzitutto, facciamo due ipotesi forse ovvie, ma importanti:
_.random_item
può scegliere l'ultima posizione.
_.random_item
sceglie ogni posizione con probabilità .1n + 1
Per dimostrare la correttezza del tuo algoritmo, hai bisogno di un argomento induttivo simile a quello usato qui :
- Per la lista singleton esiste una sola possibilità, quindi viene scelta in modo uniforme.
- Supponendo che l'elenco con elementi sia stato scelto in modo uniforme (tra tutte le permutazioni), mostra che quello con n + 1 elementi ottenuti con la tua tecnica è scelto in modo uniforme.nn + 1
Da qui in poi, la prova è sbagliata. Vedi sotto per una prova corretta; Lascio questo qui perché sia l'errore che i seguenti passaggi (che sono validi) potrebbero essere educativi.
È utile derivare una proprietà locale (vale a dire elemento) che deve essere trattenuta, perché discutere sull'intera permutazione è doloroso. Osserva che una permutazione viene scelta in modo uniforme se ogni elemento ha la stessa probabilità di trovarsi in ogni posizione, ad es
∀π∈ P e r mnPr( L = π) = 1n !⟺∀i = 1n ∀j = 1nPr( Lio= j ) = 1n( 1 )
dove e assumiamo per semplicità notazionale che inseriamo { 1 , ... , n } nell'elenco.n=|L|{1,…,n}
Ora, vediamo cosa fa la tua tecnica quando inserisci l' elemento . Dobbiamo considerare tre casi (dopo lo scambio):n+1
- Uno degli elementi nell'elenco, non scambiato, ovvero e j ∈ { 1 , ... , n }i∈{1,…,n}j∈{1,…,n}
- Uno degli elementi nell'elenco, scambiato, ovvero e j ∈ { 1 , … , n }i=n+1j∈{1,…,n}
- Il nuovo elemento, ovvero e j = n + 1i∈{1,…,n+1}j=n+1
Per ogni caso, calcoliamo la probabilità che l'elemento trovi nella posizione i ; tutti devono risultare 1ji (che è sufficiente a causa di(1)). Siapn=11n+1(1) è la probabilità che uno dei priminelementi si trovi in qualsiasi posizione nella vecchia lista (ipotesi di induzione) eps=1pn=1nn la probabilità che una posizione venga scelta da(ipotesi 1, 2). Si noti che la coice dell'elenco connelementi e la selezione della posizione di swap sonoeventi indipendenti, quindi le probabilità del fattore eventi congiunti, ad esempiops=1n+1random_item
n
Pr(Li=j,i swapped)=Pr(Li=j)⋅Pr(i swapped)=pnps
per . Ora per i calcoli.i,j∈{1,…,n}
Consideriamo solo i vecchi elementi. Un tale elemento j è nella posizione i se e solo se era lì prima dell'ultimo inserimento e i non è selezionato come posizione di swap, cioè njii
.Pr(Li=j)=pn(1−ps)=1n⋅nn+1=1n+1
Qui consideriamo che uno dei vecchi elementi viene scambiato all'ultima posizione. L'elemento avrebbe potuto trovarsi in una qualsiasi delle vecchie posizioni, quindi sommiamo tutte le probabilità che j fosse nella posizione i e i sia scelto come posizione di swap, ovverojjii
.Pr(Ln+1=j)=∑i=1npnps=∑i=1n1n⋅1n+1=1n+1
Il nuovo elemento finisce alla posizione se e solo se i è scelto come posizione di swap, cioèii
.Pr(Li=j)=ps=1n+1
Tutto è andato bene, la tua strategia di inserimento preserva davvero l'uniformità. Con il potere dell'induzione, ciò dimostra che il tuo algoritmo crea permutazioni uniformemente distribuite.
Un avvertimento: questa dimostrazione si interrompe se gli elementi inseriti non sono diversamente accoppiati. distinguibile, perché la prima equazione non è più valida. Ma il tuo algoritmo è ancora valido; ogni permutazione con duplicati è generata dallo stesso numero di esecuzioni casuali. È possibile provare ciò contrassegnando i duplicati (cioè rendendoli distinguibili), eseguire la prova sopra e rimuovere i segni (praticamente); l'ultimo passaggio fa collassare serie uguali di permutazioni uguali.
(1)
random_item
L(k){1,…,k} aver inserito .
π′∈Permn+1{1,…,n+1}
π′=(π(1),π(2),…,π(i−1),n+1,π(i+1),…,π(n),π(i))
π∈Permni∈{1,…,n+1}. By induction hypothesis, Pr(L(n)=π)=1n!. Furthermore, random_item
picks position i with probability 1n+1 by assumption. As the random choices of π and i are (stochastically) independent, we get
Pr(L(n+1)=π′)=Pr(L(n)=π)⋅Pr(i swapped)=1(n+1)!
which we had to show. By the power of induction, that proves that your algorithm creates uniformly distributed permutations.
- For example, assign every permutation in {(1,2,3,4),(2,3,4,1),(3,4,1,2),(4,1,2,3)} probability 14 and all others 0. There are also examples that assign every permutation a non-zero probability.