我正在写一些文章,旨在通过使用与扑克相关的主题来教授入门编程概念。目前,我正在研究洗牌的主题。
As 杰夫·阿特伍德 (Jeff Atwood) 在 CodingHorror.com 上指出 http://www.codinghorror.com/blog/archives/001015.html,一种简单的洗牌方法(迭代数组并将每张卡与数组中其他位置的随机卡交换)会创建不均匀的排列分布。在实际应用中,我只会使用Knuth Fisher-Yates 洗牌 http://en.wikipedia.org/wiki/Knuth_shuffle以获得更均匀的随机性。但是,我不想用对编码器不太友好的算法来解释编程概念。
这就引出了一个问题:如果黑帽知道你正在使用 52 张牌的简单洗牌方式,他们会有多大的优势?看起来它会无限小。
与简单的洗牌相比,克努斯洗牌是一个微不足道的变化:只需与牌组剩余(未洗牌)部分中的任何卡交换,而不是与整个牌组中的任何位置交换。如果您将其视为从剩余的未选择的卡片中按顺序重复选择下一张卡片,那么它也非常直观。
就我个人而言,我认为,当正确的算法不再复杂(并且更容易可视化!)时,教给学生一个糟糕的算法是一种糟糕的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)