Primero, hagamos dos suposiciones quizás obvias, pero importantes:
_.random_item
Puede elegir la última posición.
_.random_item
elige cada posición con probabilidad 1n+1 .
Para probar la exactitud de su algoritmo, necesita un argumento inductivo similar al que se usa aquí :
- Para la lista singleton solo hay una posibilidad, por lo que se elige de manera uniforme.
- Suponiendo que la lista con elementos fue elegida uniformemente (de todas las permutaciones), demuestre que el que tiene n + 1 elementos obtenidos por su técnica es elegido uniformemente.nn+1
De aquí en adelante, la prueba está equivocada. Consulte a continuación para obtener una prueba correcta; Dejo esto aquí porque tanto el error como los siguientes pasos (que son sólidos) pueden ser educativos.
Es útil derivar una propiedad local (es decir, en cuanto a elementos) que debe mantenerse, porque discutir sobre toda la permutación es doloroso. Observe que una permutación se elige uniformemente si cada elemento tiene la misma probabilidad de estar en cada posición, es decir
∀π∈PermnPr(L=π)=1n!⟺∀i=1n ∀j=1nPr(Li=j)=1n(1)
donde y asumimos, en aras de la simplicidad de notación, que insertamos { 1 , ... , n }n=|L|{1,…,n} en la lista.
Ahora, veamos qué hace tu técnica al insertar el elemento . Tenemos que considerar tres casos (después del intercambio):n+1
- Uno de los elementos de la lista, no intercambiado, es decir, y j ∈ { 1 , ... , n }i∈{1,…,n}j∈{1,…,n}
- Uno de los elementos en la lista, intercambiado, es decir, y j ∈ { 1 , ... , n }i=n+1j∈{1,…,n}
- El nuevo elemento, es decir, y j = n + 1i∈{1,…,n+1}j=n+1
Para cada caso, calculamos la probabilidad de que el elemento esté en la posición i ; todos tienen que resultar ser 1ji (que es suficiente debido a(1)). Dejepn=11n+1(1) sea la probabilidad de que uno de los primerosnelementos esté en cualquier posición de la lista anterior (hipótesis de inducción), yps=1pn=1nn la probabilidad de que cualquier posición sea elegida por(supuestos 1, 2). Tenga en cuenta que la clave de la lista connelementos yla elección de laposición de intercambio soneventos independientes, por lo que las probabilidades de factor de eventos conjuntos, por ejemplops=1n+1random_item
n
Pr(Li=j,i swapped)=Pr(Li=j)⋅Pr(i swapped)=pnps
para . Ahora para los cálculos.i,j∈{1,…,n}
Solo consideramos el viejo n elementos . Tal elemento está en la posición i si y sólo si estaba allí antes de la última inserción y i no se selecciona como posición de intercambio, es decir jii
.Pr(Li=j)=pn(1−ps)=1n⋅nn+1=1n+1
Aquí consideramos que uno de los elementos antiguos se cambia a la última posición. El elemento podría haber estado en cualquiera de las posiciones anteriores, por lo que sumamos todas las probabilidades quej estuviera en la posición i e i se elija como posición de intercambio, es decirjii
.Pr(Ln+1=j)=∑i=1npnps=∑i=1n1n⋅1n+1=1n+1
El nuevo elemento termina en la posición si y sólo si i es elegido como la posición de intercambio, es decirii
.Pr(Li=j)=ps=1n+1
Todo salió bien, su estrategia de inserción realmente preserva la uniformidad. Por el poder de la inducción, eso prueba que su algoritmo crea permutaciones distribuidas uniformemente.
Una palabra de advertencia: esta prueba se descompone si los elementos insertados no son diferentes en pares o resp. distinguible, porque entonces la primera ecuación ya no es válida. Pero su algoritmo sigue siendo válido; cada permutación con duplicados es generada por el mismo número de ejecuciones aleatorias. Puede probar esto marcando duplicados (es decir, haciéndolos distinguibles), realice la prueba anterior y elimine las marcas (virtualmente); el último paso colapsa conjuntos de permutaciones de igual tamaño al mismo.
Como Steven ha señalado correctamente en los comentarios, la prueba anterior es fundamentalmente defectuosa como (1) no se cumple; puede construir distribuciones en el conjunto de permutaciones que cumplen el lado derecho, pero no el lado izquierdo¹.
Por lo tanto, tendremos que trabajar con probabilidades de permutaciones, lo que resulta que no es tan malo después de todo. Las suposiciones random_item
y la estructura inductiva descrita al comienzo del post permanecen en su lugar, continuamos desde allí. Dejar denotar la lista después de { 1 ,L(k)haber insertado ... , k } .{1,…,k}
Deje π′∈Permn+1 una permutación arbitraria de . Se puede escribirúnicamentecomo{1,…,n+1}
π′=(π(1),π(2),…,π(i−1),n+1,π(i+1),…,π(n),π(i))
π∈Permni∈{1,…,n+1}Pr(L(n)=π)=1n!random_item
i1n+1πyo
Pr( L( n + 1 )= π′) = Pr( L( n )= π) ⋅ Pr( I Intercambié ) = 1( n + 1 ) !
que tuvimos que mostrar Por el poder de la inducción, eso prueba que su algoritmo crea permutaciones distribuidas uniformemente.
- Por ejemplo, asigne cada permutación en {(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.