0

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

我对此进行了测试并收到了一些奇怪的结果。如果我有两个相同 PRNG 的实例,并且每次都用两个不同的随机种子播种它们。随机数必须在 0 到 1000 之间。在 10,000,000 次迭代后,我得到相同的数字 1046 次。如果我每次都没有播种它们,我会收到大约相同的次数(1033)。我不明白什么?如果您不每次都重新播种,我认为几率会更大(嗯,也许不是)。就像从两副牌中挑选两张牌一样。如果我不每次都洗牌,我会认为如果我这样做,几率会有所不同。

谢谢,加里

4

2 回答 2

1

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

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

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

于 2012-08-27T22:31:03.557 回答
0

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

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

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

于 2012-08-27T22:29:28.750 回答