2011-10-26 30 views
5

No estoy seguro de si la siguiente pseudo-código puede generar un uniformly random permutation:Generar una permutación aleatoria uniforme

PERMUTATE(A): 
    n = A.length 
    for i = 1 to n 
     swap A[i] and A[random(1,n)] 

Parece ser correcta, pero alguien me puede dar una prueba rigurosa para verificar su corrección o incorrección ?

Respuesta

14

está sesgada Esta solución, que quieren que el Fisher Yates algorithm [que es similar] de permutación no sesgada. [básicamente, debe cambiar con random(i,n) en lugar de con random(1,n)]

This thread explica cómo y por qué su solución está sesgada.

Cuestiones relacionadas