具有> 64位种子的伪随机数发生器,用于52卡牌组随机播放

jjo*_*son 5 random shuffle

在编写卡片洗牌算法时,我意识到有52个!〜= 2 ^ 225可能发生的混乱.鉴于此,在我看来,基于具有标准32位或64位种子的PRNG的任何混洗算法将仅能够产生所有可能的混洗的子集.由于我的平台只有一个32位种子PRNG(只是POSIX srandom()/ random()函数),我想知道是否有任何方法可以创造性地使用它来创建一个能够产生任何结果的混洗算法.如果没有,有没有人知道PRNG算法能够使用种子,它是几个32位整数的组合,我可以自己实现?

the*_*Sin 1

如果你想使用当前的随机数生成器来解决你的问题,你只需要找到一种方法将所有可能的洗牌的参数空间分组。

例如,如果您有一个只能是 1 到 4 的随机种子,但参数空间有 12 种可能的排列,您将使用两个随机种子进行求解:

(seed1) 定义您所在的参数组(1-4,5-8 或 9-12)
(seed2) 定义哪个元素是您的最终结果

(参数集不必是种子大小的偶数倍才能起作用。)

我使用这种方法来解决固态物理建模中非常复杂的问题。这是一个严格的数学解决方案,但它可能不是最优雅的软件解决方案。祝你好运。