从一个32位的有限集合中生成伪随机不重复整数

3

我希望能够将40亿个正整数按伪随机顺序输出,直到全部40亿个数字输出完毕前不要重复。我希望对于给定的种子,这个序列是可重复和可预测的。

是否有一种好的算法可以生成这样一个序列,而不必将有序序列存储在内存中,然后在整个序列上运行伪随机排序操作?如果它使事情更容易,那么随机性可以非常弱。

谢谢。


1
return i++ 太弱了吗?;-) - assylias
你可以使用Assylia的嬉皮笑脸的回答,然后将输出与固定值(种子)进行异或运算。 - 500 - Internal Server Error
你应该能够以特定的顺序使用位运算符创建一种看似随机但实际上完全非随机的模式。我认为其中涉及了一些递归。 - Scottie
1个回答

1
您可以使用简单的线性同余生成器,并使用适当的值 a (= 214013)c (= 2531011)m (= 2^32),使其达到完全周期。
X(n+1) = (a*X(n) + c) mod m

这将生成所有 2^32个值,不重复且在此后重复相同的序列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接