我刚刚阅读this interesting question关于一个从不连续三次生成相同值的随机数生成器。这显然使随机数发生器与标准的均匀随机数发生器不同,但我不确定如何定量描述该发生器与没有这种属性的发生器的区别。
假设您递给我两个随机数生成器R和S,其中R是一个真正的随机数生成器,S是一个真正的随机数生成器,它被修改为从不连续三次生成相同的值。如果您没有告诉我哪一个是R或S,我能想到的唯一方法就是运行生成器,直到其中一个生成器连续三次产生相同的值。
我的问题是 - 是否有一个更好的算法来告诉两个发生器分开?不产生相同数字三次的限制是否会以某种方式影响发生器的可观察行为,而不是阻止三个相同的值连续出现?
答案 0 :(得分:2)
如果通过拒绝S
来定义R
,那么S
生成的序列将是R
生成的序列的子序列。例如,采用一个简单的随机变量X
,其概率为1
或0
,您可以:
R = 0 1 1 0 0 0 1 0 1
S = 0 1 1 0 0 1 0 1
区分这两者的唯一真正方法是寻找条纹。如果你正在生成二进制数,那么条纹是非常常见的(以至于人们几乎总能区分随机的100位数序列和学生写下来试图随机的序列)。如果数字均匀地取自[0,1]
,那么条纹就不常见了。
一旦你知道了分布,或者更好的是,在三个连续相等数的概率大于{{1}之前所需的预期数量,计算三个连续数字相等的概率很容易。 }为您最喜欢的p
选择。
答案 1 :(得分:2)
由于Rice's Theorem,无法判断哪个是哪个。
证明:设L是正常RNG的输出。设L'为L,但除去所有长度> = 3的序列。有些TM识别L',但有些则不识别。因此,根据莱斯定理,确定TM是否接受L'是不可判定的。
正如其他人所指出的那样,你可以做出一个断言,例如“它已经运行了N个步骤而不重复三次”,但是你永远无法实现“它将从不重复”一个数字三次。“更合适的是,至少有一台机器无法确定它是否符合此标准。
警告:如果你有一个真正的随机发生器(例如核衰变),赖斯的定理可能不适用。我的直觉是这个定理仍适用于这些机器,但我从未听过它的讨论。
编辑:次要证据。假设P(X)
很有可能确定X
是否接受L'
。我们可以构建一个(无数个)程序F,如:
F(x): if x(F), then don't accept L'
else, accept L'
P无法确定F(P)
的行为。此外,请P
正确预测G
的行为。我们可以构建:
F'(x): if x(F'), then don't accept L'
else, run G(x)
因此,对于每一个好的案例,必须至少存在一个不良案例。
答案 2 :(得分:1)
由于您定义它们仅在特定属性方面有所不同,因此没有更好的算法来区分这两者。
如果你做了三倍的randum值,那么生成器S
将比R
略微产生所有其他三元组,以便补偿丢失的三元组(X,X,X)
。但要获得显着的结果,您需要的数据远远超过第一次连续三次找到任何值所需的数据。
答案 3 :(得分:0)
可能使用ENT(http://fourmilab.ch/random/)