【发布时间】:2012-03-25 19:44:45
【问题描述】:
在编写洗牌算法时,我意识到有 52 个! ~= 2^225 可能发生的洗牌。鉴于此,在我看来,任何基于具有标准 32 位或 64 位种子的 PRNG 的洗牌算法都只能产生所有可能洗牌的子集。由于我的平台只有 32 位种子 PRNG(只有 POSIX srandom()/random() 函数),我想知道是否有任何方法可以创造性地使用它来创建能够产生任何结果的洗牌算法。如果没有,有没有人知道 PRNG 算法能够使用种子,种子是我可以自己实现的几个 32 位整数的组合?
【问题讨论】:
-
有很多内部状态>226位的RNG。最受欢迎的可能是 Mersenne Twister 和 Marsaglia xorshift+。