这本书是从一串乱码开始的:
sa de er ge d sa de tu ba
这是有人在键盘上随手敲出来的。没有含义,没有出处,看起来什么都不像。可就是这个「什么都不像」,值得停下来问一句:我们凭什么说它「乱」?「乱」到底是一种可以定义、可以测量的性质,还是只是「我看不出规律」的另一种说法?
这一章就把这个感觉逼到墙角:随机,到底是个东西,还是只是个借口?
第一直觉:看不出规律
问十个工程师「这串字符随机吗」,九个会说「看起来挺随机的」。追问一句「什么叫看起来」,答案通常是:看不出规律。
这个直觉很好,但有个漏洞:「看不出」是主观的。给你两串数:
3 1 4 1 5 9 2 6 5 3 5 8 9 7 97 2 9 0 4 6 1 8 3 5 7 2 0 4 9
哪串更随机?多数人会说第二串——第一串开头几个数「太顺了」。但第一串是圆周率 π 的小数部分,从第一位开始,一位不多一位不少,是数学里确定得不能再确定的东西;第二串才是我瞎敲的。看出规律与否,取决于你认不认识那个规律。所以「看不出规律」定义不了随机,它只定义了「你不知道规律」。
换个问法:这串东西能不能被压短
把「有没有规律」换成一个能动手操作的问题:这串字符能不能用更短的话完整描述出来?
比如 abababababababab,十六个字符,但你不需要记住十六个字符,只要记住「ab 重复八次」——七个字。再比如 3.1415926535…,圆周率小数点后一百万位,听起来信息量大得吓人,但一段几十行的程序就能把它全部算出来。它的「描述」很短。
反过来,sa de er ge d sa de tu ba 这串,你想向别人完整复述它,除了把每个字符原样报一遍,没有更省事的办法。压不短。
大白话:一串东西的「规律含量」,可以用「最短的完整描述有多长」来量。描述越短,规律越多;描述跟原串一样长,就是没规律——这就是我们直觉里的「随机」。
这个想法被形式化之后叫 柯尔莫哥洛夫复杂度——大白话讲,就是「能生成这串东西的最短程序的长度」。按这个定义,随机串就是「最短的程序就是把串本身打印出来」的那种串。圆周率不随机,因为程序很短;你乱敲的那串很随机,因为没法压缩。
这个定义漂亮极了,还给出了一个反直觉的推论:绝大多数字符串都是随机的。道理是简单的计数——长度能省一位以上的描述,总数就那么些,根本不够分给所有字符串。所以「乱」不是个例,「乱」是常态,「有规律」才是稀有的意外。
泼一盆冷水:这个定义算不出来
别急着高兴。柯尔莫哥洛夫复杂度有个要命的性质:它是不可计算的。不存在一个通用程序,你扔给它任意一串字符,它告诉你最短描述有多长。粗略地说,要证明「没有更短的描述了」,你得排除所有可能的压缩方案,而这比把宇宙算一遍还难。
所以现实里我们退而求其次,用的是一堆统计检验——大白话讲,就是拿一堆「随机串应该有的样子」去对:0 和 1 是不是大约各一半?连续三位相同的频率是不是在正常范围?有没有藏着的周期?通不过检验的,肯定不随机;全部通过的,也只能说「我们没抓到它的规律」,不能说它真随机。
大白话:证明一串东西随机,基本做不到;证明它不随机,只要抓到一个规律就够了。所以随机的「判定」永远是单向的——只能证伪,不能证实。
那串乱码的判决
回到开头那串字符。它压不短(我们想不出比原样复述更省的描述),它也没有什么统计上的可疑之处。按我们能用的所有判据,它是随机的。
但注意第三章会见面的一个事实:这串字符是人敲的。人是个糟糕的随机源——手指会下意识交替、会避开同一个键连击、会偏爱键盘中间的位置。真要较真,「人随手敲的乱码」和「掷骰子掷出来的乱码」在统计上是分辨得出来的。人以为自己在制造随机,其实制造的是「自己觉得像随机的东西」。
这带来一个贯穿全书的问题:随机到底是世界本身的性质,还是我们对世界无知的度量?硬币落地是哪一面,是「随机的」,还是只是「你算不过来」?下一章,我们从一枚硬币开始,把这个问题掰开。