perl - 这种改组算法的效率和质量如何?

标签 perl sorting random performance

最近关于 sorting randomly using C# 的问题让我想起了有时我在 Perl 中洗牌我的数组的方式。

@shuffled = sort { rand() <=> rand() } @array;

上述问题中建议的解决方案是 Fisher-Yates shuffle ,它在线性时间内工作。

问题是:我的代码片段的效率如何,这种洗牌“真的”是随机的吗?

最佳答案

我不是 Perl 内部专家,所以我不知道“排序”在这里是如何工作的。然而,大多数排序函数都希望它们的比较具有一致性,如果函数本身是随机的,我希望它们能够以不可预测的方式工作。不幸的是,不可预测性与随机性不同,因此我对您的洗牌数组没有信心。它可能倾向于将元素按某种顺序排列,就像匆忙创建的复杂递归关系可能不是随机的一样。

我建议使用 Fisher-Yates,而不是分析排序函数。

正如 Knuth 所说,随机性太重要了,不能任凭运气。

关于perl - 这种改组算法的效率和质量如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/375450/

相关文章:

perl - 在 AWK 中调用 Perl 脚本

c - 冒泡排序ideone超过时间限制

java - 在数组中排序

ruby - 将随机数生成器偏置为偏差为 b 的某个整数 n

C# 随机数生成器每次仍然给出相同的数字

java - 在 Java 中随机生成*有趣的*字符串

Perl 大容量下载直接到文件(以避免 RAM 过载)

mysql - Perl mysql mac地址错误

python - 如何在命令行上处理 utf8(使用 Perl 或 Python)?

javascript - Jquery Quicksand基于html5数据属性对元素进行排序