我不确定以下伪代码是否可以生成uniformly random permutation
:
PERMUTATE(A):
n = A.length
for i = 1 to n
swap A[i] and A[random(1,n)]
这似乎是对的,但任何人都可以给我一个严格的证据来验证其正确性或错误吗?
答案 0 :(得分:17)
此解决方案有偏见,您希望Fisher Yates algorithm [类似]用于非偏置排列。 [基本上,您需要与random(i,n)
交换,而不是与random(1,n)
]
This thread讨论了解决方案偏向的方式和原因。