gpt4 book ai didi

mysql - MySQL 的 RAND() 是否足以用于纸牌游戏的 "shuffling"纸牌组?

转载 作者:行者123 更新时间:2023-11-29 01:33:15 24 4
gpt4 key购买 nike

我有一个扑克牌和二十一点游戏,它在 MySQL 数据库中存储一副基本纸牌。为了洗牌,我使用 ORDER BY RAND() 对表格进行随机排序,然后按该顺序将牌插入到不同的表格中。使用 RAND() 是否会产生真实的赔率,就像玩真牌和物理洗牌一样,还是这个函数不够随机?

最佳答案

除非您经常练习,否则用真牌洗牌并不是那么随机。洗牌很容易不正确,以至于牌包的顶部或底部都没有洗好。

使用 ORDER BY RAND() 来洗牌是一种合理的方法,但有一些事情需要注意:

  • 如果 RAND() 生成两个完全相等的随机数,则会引入轻微的偏差,因为它不会相对于彼此正确洗牌这两张牌。
  • RAND() 不是加密安全的。通过查看一副牌中的一些第一张牌,熟练的攻击者可能可以推断出用于洗牌的 PRNG 的内部状态,从而预测剩余的牌。
  • ORDER BY RAND() 需要 O(n log(n)) 次操作。它很可能具有可接受的随机排列 52 行的性能,但它可能不是您想要用于排列数百万行的东西,例如。

出于娱乐目的,您的方法应该没问题。如果这是为了大笔金钱,您可能需要使用更好的洗牌算法,例如 Fisher Yates shuffle和加密安全的随机数生成器。

关于mysql - MySQL 的 RAND() 是否足以用于纸牌游戏的 "shuffling"纸牌组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5046819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com