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

时间:2017-09-07 09:32:21

标签: algorithm random shuffle poker

我正在编写一个在线扑克游戏。改组部分使用Fisher Yates算法。但我不知道哪个随机数生成器可以为混洗算法生成好的不可预测的随机数。 52张牌有52张! 〜= 8.065e67可能的序列。

2 个答案:

答案 0 :(得分:2)

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

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

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

在Linux上,您只需从/dev/urandom字符设备文件中读出随机字节。

答案 1 :(得分:1)

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

我通常只使用硬件真正的RNG(现在大多数PC都有)用于加密和播种这些PRNG,但我被告知,一些更好的RNG足够快,甚至可以为模拟生成值。您必须查看硬件。