首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么RNG(随机数发生器)算法适合扑克牌洗牌?

什么RNG(随机数发生器)算法适合扑克牌洗牌?
EN

Stack Overflow用户
提问于 2017-09-07 09:32:20
回答 2查看 1.2K关注 0票数 1

我在给一个在线扑克游戏编程。洗牌部分采用Fisher Yates算法。但是我不知道哪个随机数发生器能产生很好的不可预测的随机数,供洗牌算法使用。52张卡片有52!~= 8.065e67可能的序列。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-07 09:39:49

8e+67是一个很大的数字,但它的数据大小并不高。它只有226位的数据长度。28字节

您可以考虑使用CSPRNG,一种加密强伪随机生成器,即产生足够强随机性以用于密码学的RNG。

有时CPU也有一个真正的随机数源,它是快速的。我在这里描述CSPRNG。

在Linux上,您可以简单地从/dev/urandom字符设备文件中读出随机字节。

票数 2
EN

Stack Overflow用户

发布于 2017-09-07 16:46:00

正如您所指出的,您应该使用一个远远超过52!可能的内部状态,这意味着226位状态。有许多PRNG超过这一点,有1024位或更多的状态。你也想要一些快速的东西,这样你就可以模拟数百万的手。满足这些标准的最流行的算法是Mersenne。我个人也喜欢Marsaglia的XORshift变体。

我通常只使用硬件真正的RNG(现在大多数个人电脑)用于加密和播种这些PRNG,但我被告知,一些更好的RNG足够快,甚至为模拟产生价值。你得查一下你的硬件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46092843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档