两个PRNG可以用不同的种子生产相同的数字吗?

时间:2012-08-27 22:12:56

标签: prng

我知道如果您使用与两个不同PRNG相同的种子,您将收到相同的数字序列。有谁知道是否有可能用两个不同的种子生成相同的数字?如果是这样,赔率是多少?

我对此进行了测试并收到了一些奇怪的结果。如果我有两个相同PRNG的实例,我每次用两个不同的随机种子播种它们。随机数必须在0到1000之间。在10,000,000次迭代后,我获得相同的数字1046次。如果我每次收到大约相同次数的相同数字时都不播种它们(1033)。我不明白的是什么?如果你不每次重播(嗯,也许不是),我认为可能性会大得多。就像从两个甲板上挑两张牌一样。如果我每次都认为赔率不同,那么如果我这样做,我就不会洗牌。

谢谢, 加里

2 个答案:

答案 0 :(得分:1)

赔率取决于您正在使用的PRNG。假设它在均匀分布中生成数字,并且随机选择种子*那么它只是您可以表示的不同数字的数量的函数。

*随机意味着与前一个种子无关,并且不知道正在使用的算法。

对于32位整数,您可以表示2 ^ 32个不同的数字,因此给定一个整数,另一个足够随机数相同的几率为1 /(2 ^ 32)。

答案 1 :(得分:0)

这个问题的答案取决于你正在使用的PRNG。不同的实现有不同的保证。如果你很幸运,文档会告诉你这些保证是什么。

然而,任何体面的PRNG对于任何有效的种子都会有很长的周期。因此,产生相同下一个数字的两个不同种子的几率应该非常小。 (我希望大约为1 /(2 ^ N),其中N是它正在使用的数据类型中的位数。)

最后,我想知道这是否真的是你需要的信息。听起来你对独特性有一些要求,而不是随机性。如果您关心的是独特性,那么有更好的解决方案。古老的经典之作是在一个持续时间足够长的地方保持一个不断增加的计数器。您还可以使用GUID - 许多现代平台都有库代码来创建它们。