生成均匀的随机排列

时间:2011-10-26 12:12:50

标签: algorithm

我不确定以下伪代码是否可以生成uniformly random permutation

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

这似乎是对的,但任何人都可以给我一个严格的证据来验证其正确性或错误吗?

1 个答案:

答案 0 :(得分:17)

此解决方案有偏见,您希望Fisher Yates algorithm [类似]用于非偏置排列。 [基本上,您需要与random(i,n)交换,而不是与random(1,n)]

交换

This thread讨论了解决方案偏向的方式和原因。