假设您正在测试整数范围内的随机性,验证这一点的一种方法是创建一个数以百万计(嗯,可能是 10,000 左右)的“随机”数,并将它们的出现绘制在直方图上。
****** ****** ****
***********************************************
*************************************************
*************************************************
*************************************************
*************************************************
*************************************************
*************************************************
*************************************************
*************************************************
1 2 3 4 5
12345678901234567890123456789012345678901234567890
上面显示了一个“相对”的正态分布。
如果它看起来更偏斜,例如:
****** ****** ****
************ ************ ************
************ ************ ***************
************ ************ ****************
************ ************ *****************
************ ************ *****************
*************************** ******************
**************************** ******************
******************************* ******************
**************************************************
1 2 3 4 5
12345678901234567890123456789012345678901234567890
然后你可以看到随机性减少了。正如其他人所提到的,还有重复的问题需要解决。
如果您要使用生成器编写一个包含 10,000 个随机数的二进制文件,例如从 1 到 1024 的随机数,并尝试使用某种压缩(zip、gzip 等)压缩该文件,那么您可以比较这两个文件尺寸。如果有“大量”压缩,那么它就不是特别随机的。如果大小没有太大变化,那么它是“非常随机的”。
为什么这有效
压缩算法寻找模式(重复和其他)并以某种方式减少它。查看这些压缩算法的一种方法是衡量文件中的信息量。高度压缩的文件信息少(例如随机性),压缩程度低的文件信息多(随机性)