Sunday, June 12, 2011

随机——概率幽灵

有一个程序员都看的懂的网络流行笑话,说有人写了一个超快的随机数生成函数,全部代码如下:
int getRandomNumber(){
return 4;
}
相信不少人看了都会会心一笑,说这程序员也太懒了,一直返回4,怎么就能生成随机数了呢?可是等我们仔细想象随机数的定义,随机数应该是跟此前发生的数无关的数,这也就意味着,无论此前生成的是什么数字,都不管,需要重新生成。
那么,每次产生4有什么问题呢??
有数学家宣称,让一只长生的猴子敲击键盘无数次,总有一段是莎士比亚的某一部作品。其实我们可以推广下,让一只长生的猴子敲击键盘无数次,我们总可以找到人类历史上出现过的所有信息。
回到我们的问题,一个随机数生成器,某天生成的序列是“444444444……”,并非毫无可能,按照概率论的说法,随机数生成器生成的序列中,总会有任意一个数字的无限长的重复子序列。
也许有人已经开始迷糊了:“等一下,你怎么能说一直是某个数字的重复序列是随机序列呢,虽然你说的似乎有道理……”
让我们再来看一个简单的例子。
给你一枚普通的硬币,抛起来,掉到地上,假设硬币不能立起来,那么你猜正面的可能性有多大?
“这还用问,小孩子都知道,是1/2。”
好的,我们抛一下,结果是正面,那么我再抛一下,结果还是正面的概率是多少呢?
“嗯,应该也是1/2吧”
好的,我们再抛一下,结果还是正面,那么再抛一下呢?如果我连续抛出来了10个正面之后,下一次我再抛出正面的概率是多大呢?
可能有人额头已经开始出汗了,掏出笔,想一想概率论上学到的道理:每次抛都是独立事件,互相应该不受干扰,那么下一次结果是正面的概率应该仍是1/2。但是连续抛出11次正面,天哪,这个概率太小了。。。。似乎下一次更有可能出现反面啊。。。
好吧,相信到这里,大部分人已经彻底晕了。如果你还没晕,相信我,要么是你概率论没学好,要么是……你的神经无比粗壮。
这几个例子说明的其实都是随机。
现代概率论可以告诉我们某某事情发生的概率是多少,但是永远无法准确的告诉我们发生与否。事实上,概率为1的事情不一定会发生,而概率为0的事情也有可能会发生。
是不是听起来挺可怕?就像一个数学幽灵一样,无法捉摸。
实际上,当我们再仔细思考概率论的基础时,会发现数学上的假设与真实之间,出现了那么一丝的不和谐。什么叫相互独立事件?之前抛硬币跟下次抛硬币之间的独立真的符合数学上的理想定义么?
问题到了这一步,是现代最伟大的数学家或物理学家都无法回答的了。因为这涉及到这个宇宙的基本性质。在时空上看,多个事件点之间的联系并不是那么好理解。
一种最粗鲁的解释是我们的宇宙在时空中是不断分裂的,任何事件的发生的多个可能结果都导致了一个新的宇宙,我们在这个宇宙中只是一种偶然。因此,我们未来要做什么其实跟过去无关,因为总会导致均等机会的新的宇宙产生。
另一种解释,是宇宙中有某种神秘的力量,让整体稳定分布符合概率统计,小概率事件的发生,其实类似池塘水波的震荡,有波峰,就有波谷,而且当没有外在力量影响的时候,产生大水波的可能性很小,但允许极小概率的局部小震荡。这样的话,某天我们发现一件不可思议的小概率事件发生的时候,其实是发生了震荡的缘故。
以上两种解释似乎都有一定道理,但可能只有后人才有可能更完善的理解这个问题了。