algorithm - 朴素洗牌的现实问题

标签 algorithm probability shuffle

我正在撰写一些文章,旨在通过使用与扑克相关的主题来教授初级编程概念。目前,我正在研究洗牌的主题。

作为Jeff Atwood points out on CodingHorror.com ,一种简单的洗牌方法(遍历数组并将每张牌与数组中其他地方的随机牌交换)会产生不均匀的排列分布。在实际应用中,我只会使用 Knuth Fisher-Yates shuffle以获得更均匀的随机性。但是,我不想用对编码器不太友好的算法来解释编程概念。

这引出了一个问题:如果黑帽黑客知道您正在使用 52 张牌的简单洗牌,他们会有多大优势?看起来它会无限小。

最佳答案

与原始洗牌相比,knuth 洗牌是一个微不足道的变化:只需交换牌组剩余(未洗牌)部分中的任何一张牌,而不是交换整个牌组中的任何一张牌。如果您将其视为从剩余未选择的卡片中按顺序重复选择下一张卡片,这也非常直观。

就我个人而言,我认为当正确的算法不再复杂(并且更容易可视化!)时,教给学生一个糟糕的算法是一种糟糕的方法。

关于algorithm - 朴素洗牌的现实问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/96840/

相关文章:

C++ 使用第三个序列作为标准检查两个序列是否相等

arrays - 检查 2 个数组中的数字是否相加给定数字的算法

algorithm - O(n) - 字典顺序的下一个排列

python-3.x - 鉴于我有python中指定的各种范围的概率,我如何生成随机数

python - Numpy - 相关系数和相关统计函数不会给出相同的结果

c++ - 二项分布压缩

python - 争夺 Python 列表

c++ - 带提示的二分搜索

php - 如何使用 PHP 在 MySQL 上显示像之前结果一样的序列随机数据?

algorithm - 如何实现随机的重复洗牌 - 但不是太随机