我不确定以下伪代码是否能生成一个 均匀随机排列
:
PERMUTATE(A):
n = A.length
for i = 1 to n
swap A[i] and A[random(1,n)]
看起来是对的,但有没有人能给我一个严谨的证明来验证它的正确性或错误性?
我不确定以下伪代码是否能生成一个 均匀随机排列
:
PERMUTATE(A):
n = A.length
for i = 1 to n
swap A[i] and A[random(1,n)]
看起来是对的,但有没有人能给我一个严谨的证明来验证它的正确性或错误性?
这个方案存在偏差,你需要使用Fisher Yates算法[相似但无偏差的置换]。[基本上,你需要用random(i,n)
而不是random(1,n)
来进行交换]
这个帖子讨论了为什么你的解决方案存在偏差。