|
|
前几天微薄上看到那张图,说xxx数学老师给学生讲π时提到,因为π是无理数,他后面的小数位数将永远不会重复,以至于可能出现任何的组合。这个组合可以是你的生日,你爱人的生日,或者是转换成数字以后的你的名字,你所希望事物的名字。
听上去好像很浪漫,也很有道理。其实这个说法,可以认为来自于无限猴子理论,如果有兴趣可以去wiki查查,里面有详细的讲解和概率分析。
然后,我真的去做了。我去查了我的生日,我的名字,ID等等。。。。。。整个过程可以用四个字形容——脑子有病。
一开始我从网上找了一个小数点后1w位的文件来用脚本搜索,结果啥都没找到。接着就打算扩大范围,但是网上找不到1w位以后的信息,倒是有个π网(域名由64位π组成)可以提供任意长π值,但是我觉得还没到我想要的位数浏览器就得崩溃了。
后面不知怎么的,就自己写了个算π的程序,但是算出来的结果让我想砸电脑。在没修正误差的情况下,一百万阶级数只能让π精确到第6位…………(关于这个问题,现今计算π的难度在于如何保存误差。数学上已经有非常多的方法来逼近π,但是由于计算机中小数的保存机制,在计算过程中很快就会产生误差。如果不修正用,再多阶级数都是不能正确计算π的。有玩ACM的同学可以去研究研究这个问题,究竟怎么才能正确而快速的计算出π来)
其实计算π网上已经有很多的软件了,只要机器够好可以计算到任意长度,而且速度很好。我用的是quick-pi,有兴趣的人可以去找找下来玩玩。
用一百万位结果来查找的话,还是什么都没有。接下来就是用1亿位结果,1亿位的时候能查到我的生日和名字缩写,这已经很欣慰了…………我总算出现在π里面了。不过ID还是查不到,所以我就继续尝试了10亿位。首先生成这么多位的π我就花了一小时零6分钟……保存为txt为1.32g大。无法用任何软件加载,如果用脚本直接读取会导致内存泄露…………不过这倒是没啥,应付这种情况对于程序员来说是很容易的。然后处理文本到适合检索的模式,又是接近一小时。
10亿位的尝试结果和1亿位一样,还是只有名字缩写和生日,外带我又尝试了一下身份证号,也没有。
我简单分析了一下,首先是使用一百万位做了个统计,每个数字出现的频数和频率如下:
0:104798 0.0999401111
1:104589 0.0997407992
2:104945 0.1000802969
3:105124 0.1002509994
4:104957 0.1000917407
5:105276 0.1003959535
6:104353 0.0995157390
7:104693 0.0998399783
8:104886 0.1000240319
9:104987 0.1001203500
很明显每个数字几乎平均地出现,近似10%,而样本越多统计结果越接近10%,所以后面的也就不用再统计了。
然后是我的变换方法,对于数字我是保留,然后所有非数字使用系统编码编程数字,我是日文系统,所以是MS932,每个英文字母1字节,小写为十进制数三位,大写为两位。假名,汉字是两字节,一般为十进制数6位。
然后以下是一些检索结果。
首先是名字缩写,小写字母3位,十进制数9位,也就是说出现几率是0.1^9。看上去还行,但已经完全是“不可能事件”了
code:106116100 ← 缩写转化为编码
at:93585292 ← 串首所在位
content:27017 106116100 17242 ← 串前后文
然后是生日,按照422写法是8位数字,出现几率比名字缩写还高一些是0.1^8。
code:19910114
at:35366294
content:57657 19910114 56863
接下来是ID,小写字母9位,十进制数字27位,出现几率是0.1^27……我觉得如果哪一天我在π里面找到了我的ID,我可以去买一下彩票了,这几率貌似比双色球还低。
code:107110105115109111111116104
not found
然后是用汉字写的名字,因为日文系统的控制台是打不进简体中文的,所以我用的日文汉字,三个字,十进制数字18位,出现几率0.1^18,话说这个长度和身份证号正好一样,出现难度也是呵呵的。。。。。
code:230201146236147143
not found
就结果来说,无限猴子定理确实在这里得到了验证,因为每个数字出现的几率是相同的,所以一直算下去的话,真的有可能出现一些想要的字符串,只不过可能这个世界都等不到那一天到来罢了。
这个还是挺有意思的,我在想哪天写个函数,从里面随机抽取一段转换成字符串,说不定可以当神谕用。
|
|