algorithm - 生成均匀随机排列

标签 algorithm

我不确定以下伪代码是否可以生成均匀随机排列:

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

好像是对的,但是谁能给我一个严格的证明来验证它的正确性或错误性?

最佳答案

这个解决方案是有偏见的,你想要 Fisher Yates algorithm [这是相似的] 无偏排列。 [基本上,您需要使用 random(i,n) 而不是 random(1,n)]

This thread讨论您的解决方案如何以及为何存在偏见。

关于algorithm - 生成均匀随机排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7902391/

相关文章:

mysql - SNS网站私信检测算法

sql - 给定一个 RGB 值,在数据库中找到最接近匹配的最佳方法是什么?

algorithm - 如何找到不在任何最短路径上的所有边?

arrays - 在没有任何两个元素以相同顺序排列的情况下,找到一个数组可以排列的所有排列的最快算法是什么?

algorithm - 2D 中的滑动窗口最小值/最大值

c++ - 如何订购具有重复值的数组?

python - 将哈希算法从 C 语言翻译成 Python

c++ - 如何测试加密算法?

algorithm - 获取无平方数的列表

java - 算法是指数的,有没有办法让它不是这样?