代码之家  ›  专栏  ›  技术社区  ›  Gary

两个PRNG能用不同的种子产生相同数量的种子吗?

  •  0
  • Gary  · 技术社区  · 12 年前

    我知道如果你把同一个种子和两个不同的PRNG一起使用,你会得到相同的数字序列。有人知道用两个不同的种子是否可以产生相同的数字吗?如果是,几率有多大?

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

    谢谢 加里

    2 回复  |  直到 12 年前
        1
  •  1
  •   Sysyphus    12 年前

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

    *随机意味着与先前的种子没有关系,也不知道所使用的算法。

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

        2
  •  0
  •   solublefish    12 年前

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

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

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