【问题标题】:Can two PRNG's produce the same number with different seeds?两个 PRNG 可以用不同的种子产生相同的数字吗?
【发布时间】:2012-08-27 22:12:55
【问题描述】:

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

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

谢谢, 加里

【问题讨论】:

  • 你的意思是两个 PRNG 的实例,属于同一个对象类?

标签: prng


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。我正在使用 Mersenne Twister PRNG。我还做了一个测试,在 100,000 次迭代中我收到了 4 次点击。这是 .00004 %
  • 100,000 次迭代与原始数字比较,还是相互比较?如果是后者,您需要查看en.wikipedia.org/wiki/Birthday_problem,详细了解为什么它比预期的可能性更大。
  • 我有 2 个 PRNG 实例,每次循环时我都为每个实例使用不同的种子。然后我从每个生成一个随机数并比较它们以查看它们是否相同
【解决方案2】:

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

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

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

【讨论】:

  • 感谢您的回复。这正是我所需要的。
猜你喜欢
  • 2012-11-02
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 2020-07-09
  • 1970-01-01
相关资源
最近更新 更多