著名的 Fisher-Yates 洗牌算法可以用来随机排列一个长度为 N 的数组 A:
For k = 1 to N
Pick a random integer j from k to N
Swap A[k] and A[j]
我一再被告诫不要犯的一个常见错误是:
For k = 1 to N
Pick a random integer j from 1 to N
Swap A[k] and A[j]
也就是说,不是从 k 到 N 选择一个随机整数,而是从1到 N 选择一个随机整数。
如果你犯了这个错误会发生什么?我知道由此产生的排列不是均匀分布的,但是我不知道对于由此产生的分布有什么保证。特别是,有没有人知道元素最终位置的概率分布的表达式?