银行卡密码一般只有 6 位数,我写了一个程序,验证了所有的六位数均会在前 1000 多万位出现。其中,你的银行卡密码会有 60%的概率在前 100 万位找到,90%的概率在前 230 万位找到。最后一个六位数是 569540,在第 14118307-14118312 位出现。
然后我做出了如下的图像,横坐标是包含六位数组合的个数(1-100 万),纵坐标是对应的位数。做出的图像如下

我们可以看到,全部组合 100 万个需要 1400 多万位,而所有组合首先出现的位置的平均值 1000882 位。曲线呈现暴涨趋势,毕竟这是一个收集问题,越往后,收集新的六位数的难度越大。
当然了,银行卡密码也可能是其他位数,比如如果是 4 位数的话,根据我的程序,前 10 万位就全部包括了,最后一个出现的组合是 6716,在第 99846-99849 位。如果位数更多,那么需要的位数就越多。但是我认为,不论你多少位,都能在圆周率中找到,虽然这个还没有被严格证明。
从原因分析,我觉得π很大的概率是正规数(虽然还没有得到严格的数学上的证明)。正规数意味着它是无限不循环小数,它的每个数字的出现都是完全随机的而且概率相同,所以任何一串数字的组合的出现,都是有可能的。
于是,我自己又编写了另外一个程序,研究圆周率前 100 万位数字。
首先统计 0-9 出现的频率。

我们发现,前 100 万位里,0-9 数字出现的个数大致都为 10 万次,从直观上看,可以认为 0 到 9 出现的概率是相等的。
当然,作为理科生,仅仅从直观看是不够的,我们还需要从统计的方面来考虑,它是不是在误差范围内? 这里,我采用了卡方检验。
通过计算,我们得出 chai 的平方为 5.51。通过查表,在自由度为 9 的情况下,要想证明其不满足 0-9 的均匀分布,chai 平方值必须大于 16.9(95%确信度)。因此,可以说,其落在误差范围内。
然后,仅仅证明各个数字出现的概率相同是不够的。比如,0.1234567890123456789....,这个数字是无限循环小数,也满足各个数字出现的概率相同,但是它们之间关联都很紧密,所以显然不能"包含整个宇宙"。我们还需要验证,数字与数字之间是没有关联的。
这里我采用的方法是,计算固定间距下,圆周率数字的相关系数。具体的计算方法如下:假设π的小数点后第 i 位是 X_i,容易知道,X_1=1, X_2=4, X_3=1, X_4=5..... 因此在间距为 k 下,相关系数的计算公式如下:

这里, N 取的越大越好,我这里取的 10 万。而则代表了所有数字的平均数,这里约等于 4.5。那么经过计算,我们取不同的间距 k,画出相关系数与 k 的关系图。

因为相关系数的范围是 0-1 之间,越大,代表线性相关性越强,我们可以看到,不论 k 取多大,其在-0.01-0.01 之间,而且在 0 之上和 0 之下的分布大致相等,说明线性相关极其微弱,且在 0 附近震荡。那么在圆周率下,至少间距在 1000 之内,数字之间没什么相关性。如果能计算无穷多的位的话,我们甚至可以将其作为一个随机数产生器。 当然这个检验方法也是不充分的,但是至少能说明一些问题。
对于有理数,那么相关性就很强了。比如我们计算 1/2233,用同样第方法画出线性相关图。 我们发现,相关系数很强,而且有一定的周期,和之前的截然不同。

那么通过均匀分布检验,和相关性检验两个方面的实验,虽然不能严格证明,但是我们起码可以在一定程度上,验证了π的各个数字出现的概率是相等且随机的。数学上称这样的数为"正规数",至少我们能说明π是正规数的概率很大。
因此,对于任意的一串数字组合,都有一定的概率会出现在某位之后,更不用说是银行卡密码了。 但是这并不是一个稀奇的事情。因为满足各个数字出现的概率相等且随机的无理数太多太多了。根号 2,根号 3,e,ln 2, sin(10),等等等等,都可能包含了所有数字组合(虽然还没有完全得到证明)。
毕竟,你让一只寿命无穷的猴子,不停的在键盘上乱敲,总有一天,它会敲出林肯的《葛底斯堡演讲》。
没有评论:
发表评论