Random 伪随机数生成器是否不太可能重复?

Random 伪随机数生成器是否不太可能重复?,random,Random,所以他们说,如果你把一枚硬币掷50次,并且50次都是正面的,那么你在下一次掷硬币时仍然是50/50,在下两次掷硬币时仍然是1/4。你认为/知道同样的原理是否适用于计算机伪随机数发生器吗?我的理论是,他们不太可能在长时间内重复相同的次数 我运行了几次,结果是可信的,但我想知道我需要运行多少次才能得到异常输出 def genString(iterations): mystring = '' for _ in range(iterations): mystring += st

所以他们说,如果你把一枚硬币掷50次,并且50次都是正面的,那么你在下一次掷硬币时仍然是50/50,在下两次掷硬币时仍然是1/4。你认为/知道同样的原理是否适用于计算机伪随机数发生器吗?我的理论是,他们不太可能在长时间内重复相同的次数

我运行了几次,结果是可信的,但我想知道我需要运行多少次才能得到异常输出

def genString(iterations):
   mystring = ''
   for _ in range(iterations):
       mystring += str(random.randint(0,9))
   return mystring


def repeatMax(mystring):
    tempchar = ''
    max = 0
    for char in mystring:
            if char == tempchar:
                    count += 1
                    if count > max:
                            max = count
            else:
                count = 0
            tempchar = char
    return max


for _ in range(10):
    stringer = genString()
    print repeatMax(stringer)

我得到了所有的7分和几个6分。如果我运行这1000次,它是近似正态分布还是应该保持相对可预测性?我试图理解伪随机数生成的可预测性。

无法生成特定模式是PRNG的一个典型弱点,但随机命中大量重复数字的概率非常小,很难证明这一弱点

PRNG只使用32位状态是完全合理的,这(传统上)意味着产生一个40亿个数字的序列,然后从头开始重复。在这种情况下,你50次掷硬币的顺序可能永远不会出现相同的结果(40亿次的尝试,如果有千万分之一的机会,就不太可能成功);但如果是这样的话,那么它就会显得过于频繁

表面上看,你是在寻找k维的等分布,以此来测试你是否可以在输出中找到一个指定的模式,而不需要对特定的生成器进行深入的分析。如果您的生成器要求至少50维等分布,那么您可以保证至少看到50个头的状态一次

但是,如果生成器发出32位结果,但您仅测试每个结果是否映射到正反面,则即使生成器未通过k维测试,您也有成功的机会,而这种机会取决于生成器和映射函数的具体情况

如果您将生成器的实现调整为一次只返回一位,那么您就有机会尝试从50位状态中挤出50个磁头(或者可能只有18个,但该生成器可能有故障)。如果生成器访问所有2**50个可能的状态,其中一个状态将连续生成50个磁头。当相邻状态以更多的零开始或结束时,您可能会得到更多的头