一尘不染

随机数发生器测试

algorithm

您将如何测试随机数生成器是否正在生成实际的随机数?

我的方法:首先建立一个大小为M的散列,其中M是素数。然后取由随机数生成器生成的数字,并用M取mod,然后看它是否填充了所有散列或仅填充了一部分。那是我的方法。我们可以通过可视化证明吗?

由于我对测试的了解很少。您能建议我彻底解决这个问题吗?提前致谢


阅读 394

收藏
2020-07-28

共1个答案

一尘不染

您应该意识到,您不能 保证 随机数生成器正常工作。请注意,即使是[1,10]范围内的完美均匀分布- 在10个数字的随机采样中,也有10
-10的机会得到10乘以10。

有可能吗 当然不是。

所以-什么 可以 做什么?

我们可以从 统计学上证明 ,如果随机数生成器确实均匀分布,则组合(10,10,....,10) 不太可能 。这个概念称为
假设检验
。通过这种方法,我们可以说“具有x%的确定性水平-我们可以拒绝数据取自均匀分布的假设”。

这样做的一种常见方法是使用 Pearson的Chi-
Squared检验

,这个想法与您的相似-填写表格-检查每个单元格 观察到的 (生成的)数目是多少, 预期的
数目是多少空假设下每个像元的数字(在您的情况下,期望值为k/M-,其中M是范围的大小,k是所取数字的总数)。
然后,您可以对数据进行一些操作(有关更多信息,请参阅Wikipedia文章,以了解该操作的确切含义)-并获得一个数字(测试统计量)。然后,您检查此数字是否
可能 来自卡方分布。如果是,则不能拒绝原假设,如果不能,则可以x%的确定性确定数据不是来自统一随机生成器。

编辑: 示例:
您有一个多维数据集,并且要检查它是否“公平”(在中均匀分布[1,6])。将其抛出200次(例如)并创建下表:

number:                1       2         3         4          5          6
empirical occurances: 37       41        30        27         32         33
expected occurances: 33.3      33.3      33.3      33.3       33.3       33.3

现在,根据Pearson的检验,统计量为:

X = ((37-33.3)^2)/33.3 + ((41-33.3)^2)/33.3 + ... + ((33-33.3)^2)/33.3 
X = (18.49 + 59.29 + 10.89 + 39.69 + 1.69 + 0.09) / 33.3
X = 3.9

对于随机C~ChiSquare(5),中较高,则概率3.9~0.45(这不是不可能)1。

因此我们 不能 拒绝原假设,并且可以得出结论,数据 可能 均匀地分布在[1,6]


(1)如果值小于0.05,我们通常会拒绝原假设,但这在很大程度上取决于情况。

2020-07-28