首页 理论教育 信号与噪声:大数据时代中的错误校正和信息传输能力

信号与噪声:大数据时代中的错误校正和信息传输能力

时间:2023-11-16 理论教育 版权反馈
【摘要】:但是在现实生活中,通信渠道却充满了各种噪声。错误校正码是一种通信协议,可以帮助接收方消除信号中噪声所导致的错误。香农在他的那篇关于信息论的论文中指出,时至今日,工程师们仍然面临着一个基础性难题:信号抗噪声干扰的能力越强,传输这条信息的速度就会越慢,如何在两者之间取得平衡呢?噪声的出现,为传输渠道在固定时间内精准传送的信息长度设置了上限,香农把这个限度称作通信渠道的信息传输能力。

信号与噪声:大数据时代中的错误校正和信息传输能力

法诺平面可以教我们怎么买特兰西瓦尼亚彩票才会稳赚不赔,那么马萨诸塞州的“Cash WinFall”彩票该怎么买呢?包含多于7个点的有限维射影平面非常多,但可惜的是,它们都不能精准地满足“Cash WinFall”彩票的所有要求。因此,我们需要找到更具一般性的射影平面。结果,不是文艺复兴时期的绘画或者欧几里得几何学,而是信息论出人意料地给出了答案。

假设我希望给一颗卫星发出一条重要的信息,例如“打开右推进器”。卫星不会讲英语,因此,我实际上发出的是0与1构成的序列,计算机科学家把0、1称作“比特”(bit)。

1110101……

上面这条信息似乎干净利落,没有歧义。但是在现实生活中,通信渠道却充满了各种噪声。卫星在接收到你发送的信息时,可能同时会接收到宇宙射线,导致信息中的一个比特被篡改了,于是卫星收到的信息变成:

1010101……

这条信息看上去似乎变化不大,但是,如果它把“右推进器”篡改成了“左推进器”,这颗卫星就可能陷入大麻烦。

卫星造价昂贵,因此,我们肯定希望避免此类情况发生。在吵闹的派对上与朋友交谈时,为了不让嘈杂声淹没我们的声音,我们可能会不断重复自己的话,直到朋友听清楚为止。这个方法对卫星同样有效,在发前面那条信息时,我们可以把每个比特重复一遍,用00代替0,用11代替1:

11111100110011……

此时,如果宇宙射线篡改了其中的第二个比特,卫星就会收到:

10111100110011……

卫星知道每个信息片段要么是00要么11,而“10”是一个危险信号,表明信息传输出了问题。但是,到底是哪里出错了呢?卫星很难回答这个问题,它不知道噪声到底篡改了信号的哪个部分,也不知道原始信息的开头部分是00还是11。

这个问题不难解决,我们只需要将所有比特发三遍即可:

111111111000111000111……

被篡改之后的信息变成:

101111111000111000111……

这条信息不会对卫星造成任何损坏,因为卫星知道第一个片段中的三个比特应该是000或者111,而101意味着信息传输有问题。如果原始信息是000,宇宙射线必须篡改两个比特才会得到101这个结果。宇宙射线篡改信息的发生概率极低,一下篡改两个比特的可能性非常小。所以,卫星有足够的把握来处理这个问题:如果这三个比特中有两个是1,那么原始信息很有可能是111。

上文介绍的是“错误校正码”(error-correcting code)的一个范例。错误校正码是一种通信协议,可以帮助接收方消除信号中噪声所导致的错误。信息论的几乎所有概念都来自克劳德·香农(Claude Shannon)于1948年发表的里程碑性质的论文——“通信的数学原理”(A Mathematical Theory of Communication)。

“通信的数学原理”这个题目是不是有炒作的嫌疑啊?难道通信这种人类的基本活动也可以变成冷冰冰的数字与公式吗?

在这里,我要温馨提示或者强烈建议大家:只要有人声称借助数学方法可以解释、征服或者彻底了解这样或那样的事物,我们都不可以盲目相信。

然而,由于数学技术手段越来越广博、越来越丰富,数学家不断找到各种方法处理传统观点认为不属于数学领域的那些问题,因此,数学史就是一部扩张史。概率论现在听起来稀松平常,但人们一度认为这是自不量力的表现,因为数学研究的是各种必然性与事实,而不是随机性与可能性之类的问题。在帕斯卡伯努利等学者为偶然性的作用机制创建了数学定理之后,一切都发生了翻天覆地的变化。“无穷大理论?我没听说过这个概念”,在19世纪格奥尔格·康托尔(Georg Cantor)发表他的研究成果之前,就像神学与科学相互冲突一样,概率论与数学也是格格不入的。但是现在,对于康托尔提出的那些无穷级数,我们已经非常了解,足以教授数学专业一年级的学生了。(当然,学生们第一次接触这些概念时的确会大吃一惊。)

这些数学上的形式主义在描述某个现象时,不会表现其所有细节,而且它们也没有这种打算。例如,概率论对某些随机性问题就无能为力。在某些人看来,超出数学研究范围的问题才是最有意思的问题。但是,在当今社会,如果思考可能性问题时根本不使用概率论,那肯定是错误的。如果大家不相信,可以问一问詹姆斯·哈维。当然,如果问那些把钱输给哈维的人,效果会更好,因为他们的体会更深。

是否有与意识、社会或者美学相关的数学理论呢?毫无疑问,人们正在做这方面的尝试,但是到目前为止,进展仍然非常有限。如果有人宣称他们取得了突破,那么我们应该本能地不相信他们,但是我们也应该认识到,他们有可能真的取得了某些重要突破。

起初,人们觉得错误校正码可能并不是一个革命性的数学成果。在嘈杂的派对上,我们重复自己说的话,就可以解决问题。但是,这种解决方案是需要成本的。如果我们在发送信息时,把每个比特都发三遍,这条信息的长度就会是原始信息的三倍。对于派对上的交流而言,这可能不会有任何影响,但是,如果我们想让卫星在一秒钟之内打开右推进器,就有可能出问题。香农在他的那篇关于信息论的论文中指出,时至今日,工程师们仍然面临着一个基础性难题:信号抗噪声干扰的能力越强,传输这条信息的速度就会越慢,如何在两者之间取得平衡呢?噪声的出现,为传输渠道在固定时间内精准传送的信息长度设置了上限,香农把这个限度称作通信渠道的信息传输能力。水管可以输送的水量是有限的,同样,通信渠道的信息传输能力也是有限的。

“重复三遍”的通信协议会把通信渠道的信息传输能力降至1/3,而我们在矫正错误时并不一定需要承担这么大的损失。我们有更好的办法,香农非常了解这个办法,因为这个办法是他在贝尔实验室的同事理查德·海明(Richard Hamming)提出来的。

海明是位年轻的数学家,很早就加入了“曼哈顿计划”。他有贝尔实验室重达10吨的第五代机械继电器式计算机的低级使用权,只能在周末时使用这台计算机运行他编写的程序。但是,这台计算机有个问题,只要发生机械故障,海明的计算就只能中止,直到星期一上午才有人重新启动这台机器。这让海明非常恼火,要知道,生气是技术进步的一个重要激励因素。海明想,如果这台机器可以自己纠正错误,永远不会死机,情况不就能大大改观吗?由此,他想到了一个办法。跟卫星信息传输一样,人们在这台计算机上输入的内容可以看成是一连串的0与1。至于这两个数字是数据流中的比特、继电器的开关状态还是纸带上的小孔(当时技术水平下的数据界面),人们根本不关心。

海明采取的第一个步骤是将信息分割成一个个代码块,每个代码块由三个数字组成,比如:

111010101……

“海明码”(Hamming code)是一种把三位数的代码块转换成7位数的代码块的规则,其密码本为:

000→0000000

001→0010111

010→0101011

011→0111100

101→1011010

110→1100110

100→1001101

111→1110001

经过编码之后,上述信息就会变成:

111000101010111011010……

这些7位数的代码块叫作“代码字”(code word),海明码只允许有这8个代码字。如果接收到的信息中的代码块不是其中之一,就可以肯定有地方出错了。比如,如果接收到1010001,我们就会知道它肯定不正确,因为1010001不是代码字。此外,我们接收到的这条信息与代码字1110001只有一个地方不同,而其他代码字与我们实际看到的错误信息都不可能如此接近,因此,我们可以很有把握地猜测对方想要传输给我们的代码字是1110001,也就是说,原始信息中与之对应的三位数代码块应该是111。

可能有人认为我们太幸运了。如果接收到的信息与两个代码字都非常接近,我们该怎么办呢?我们的判断就不会那么有把握了吧?但是,这种情况不会发生,我会告诉大家原因。我们现在回过头去研究法诺平面上的那些直线:

124

135

167

257

347

236

456

我们把这些直线输入计算机时,该怎么描述它们呢?计算机可以识别的语言只有0与1,因此,我们必须把每一条直线都转换成一连串的0与1,其中,在n处的0表示“n位于该直线上”,而在n处的1则表示“n不在该直线上”。比如,第一行的124可以写成0010111,第二行的135可以写成0101011。

我们发现,这两个代码块都是海明码的代码字。实际上,海明码中的7个非零代码字正好对应法诺平面上的7条直线。因此,海明码(还包括特兰西瓦尼亚彩票的最佳号码组合)与法诺平面是完全相同的数学研究对象,只不过改头换面了!

这就是海明码隐藏得很深的几何特性。代码字是法诺平面上可以构成直线的3个点的组合,只要原始的代码字不是0000000,代码块的小变动就等同于在直线上增减一个点,而接收到的错误信息则对应两个点或者4个点。如果我们接收到两个点,我们就会知道如何找到丢失的点,它肯定是连接这两个点的唯一直线上的第三个点。如果我们接收到4个点,构成了“直线加一个点”的信息,该怎么办呢?此时,我们可以推断正确的信息应该是由可以形成直线的3个点组成的。思维缜密的人立刻会问:我们怎么知道只有3个点符合条件呢?为了便于理解,我们给这4个点分别命名为A、B、C、D。如果A、B、C位于一条直线上,那么发送方想要发送的肯定是A、B、C构成的信息。但是,如果A、C、D也位于一条直线上呢?别担心,这是不可能的,因为包含A、B、C的直线与包含A、C、D的直线有A、C两个公共点,但是公理2规定,两条直线只能相交于一个点。换言之,由于几何公理的作用,海明码具有与“重复三次”相同的校正错误的魔力。如果信息在传输过程中被篡改了一个比特,那么接收方肯定可以判断出发送方想要发送的信息。而且,我们无须花费3倍的传输时间,这种新方法在传输信息时,每3个比特的原始信息仅需花费7个比特的传输量,两者之间的比为1:2.33,效率更高。

海明码及随后出现的功能更加强大的错误校正码,推动了信息工程学的发展。构建有重重保护和双重检查模式的系统以确保信息传输无误,已经不再是人们追求的目标。海明与香农的研究足以将错误发生的频率降至非常低的程度,无论有什么样的噪声,灵活机动的错误校正码都可以消除它们造成的影响。火星轨道飞船水手9号”在把火星表面的照片发回地球时使用的阿达玛码,就是具有这种效果的错误校正码。光盘在编码时采用的是里德所罗门码,即使光盘上有擦痕也不会有多大影响。(1990年之后出生的读者,如果对光盘不太了解,可以想一想闪盘驱动器的情况。在这些驱动器中,人们为了防止数据损毁,使用了与里德所罗门码类似的博斯-乔赫里-霍克文黑姆码。)银行的汇款路线号码由一种叫作“检验和”(checksum)的简单编码构成。这种编码不是错误校正码,而是与“每个比特重复两遍”的信息协议比较相似的错误检测码。如果一个数字输入错误,执行汇款交易的计算机可能无法知道我们真正想要输入的数字是几,但是它至少知道出了问题,从而避免我们把钱汇到错误的银行账户中。

我们不清楚海明是否全盘了解他的这项新技术的适用范围,但是在他准备发表这项研究成果时,他发现贝尔实验室的老板精于此道。

专利部一定要等到申请了专利之后才同意我发表这个成果……我不相信一堆数学公式也能申请专利。我告诉他们,这是不可能的。但是他们说:“看我们的吧。”他们成功了。从此以后,我知道我对专利法的理解太肤浅了,因为我觉得某些东西应该不能申请专利(或者为这些东西申请专利是不道德的),但他们却常常能成功地申请到专利权。(www.xing528.com)

数学前进的步伐比专利办公室快。瑞士数学家、物理学家马塞尔·戈利(Marcel Golay)从香农那里听说了海明的想法之后,发明了大量的新编码。但他不知道海明本人已经开发了很多相同的编码并且申请了专利,他发表了自己的编码,导致双方就这项荣誉的归属权产生了纠纷,直到现在尚无定论。贝尔实验室得到了这项专利权,但是,依据1956年一个反垄断协议的条款,他们失去了有偿授权的权利。

海明码为什么能够奏效呢?要理解这个问题,我们必须反过来思考:在什么情况下,海明码无法发挥作用?

别忘了,最让错误校正码头疼的问题是,一个代码块与两个代码字都非常接近。收到这串令人讨厌的比特之后,接收方会无所适从,因为没有任何基于既定规则的方法可以帮助他们判断原始信息中包含的到底是哪一个代码字。

我们似乎使用了比喻这种修辞格,因为代码块和代码字都没有固定位置,为什么我们可以说一个代码块“接近”另一个代码字呢?海明在信息论概念方面的伟大贡献之一,就是强调这个说法不仅仅是比喻,甚至不需要冠上“比喻”之名。他为距离赋予了一个新的含义,现在人们称之为“海明距离”(Hamming distance)。海明距离在年轻的信息数学中的意义,同欧几里得和毕达哥拉斯心目中的海明距离在平面几何中的意义没有任何不同。海明给出的定义非常简单:两个代码块的海明距离就是把一个代码块变成另一个代码块时需要改变的比特数。比如,代码字0010111与0101011的间距是4,因为要把第一个代码字变成第二个代码字,我们需要改变排在第二、第三、第四和第五位的比特。

海明用8个代码字构建的海明码之所以能取得非常好的效果,是因为任何包含7个比特的代码块与两个不同代码字之间的海明距离不可能都小于1。否则,这两个代码字彼此之间的海明距离就会小于2。但是,两个代码字之间仅有两个比特不同的情况是不存在的。事实上,任意两个代码字的海明距离至少是4。我们可以把代码字想象成被束缚在原子核周围的电子,或者电梯中性格孤僻的人。他们都位于一个狭窄的空间中,并且尽可能地保持彼此之间的距离。

经受得住噪声干扰的所有通信方式都是以这个原则为基础的,我们日常使用的语言就是这样。如果我把“language”(语言)写成了“lanvuage”,你们肯定知道我想要说什么,因为在英语中没有其他单词与“lanvuage”仅有一个字母不同。但是,如果你写的是一些比较短的单词,例如,“dog”(狗)、“cog”(齿轮)、“bog”(沼泽)和“log”(木材),前面的推理方法就不管用了,因为这些事物在英语中出现的频率都不少,如果噪声掩盖了第一个字母的发音,你就不大可能知道对方到底说的是哪一个单词。但是,即使在这种情况下,你仍然可以借助语境修正错误。咬人的很可能是“dog”,你可能是从“log”上面掉下来的,等等。

我们有可能提高语言的效率,但是,如果我们真的这样做,就会破坏香农发现的那种严格的平衡性。很多书呆子和(或者)有数学信仰的人曾历经艰辛,创造了可以准确传递信息的简洁语言,这种语言没有英语等语言中存在的冗长、同义和歧义等问题。1906年,牧师爱德华·鲍威尔·福斯特(Edward Powell Foster)创造了一门叫作“罗欧语”(Ro)的人造语言。他的目的是弃用英语的海量词汇,代之以可根据逻辑由读音推导出语义的单词。麦尔威·杜威(Melvil Dewey)的“杜威图书十进制分类法”虽然把公立图书馆的书架管理得井井有条,但该分类法就像罗欧语一样严格死板,因此,杜威热衷于罗欧语这个事实可能并不令人吃惊。罗欧语的确非常简洁,英语中很多比较长的单词,例如“ingredient”(配料),在罗欧语中就简短得多,写作“cegab”。但是,简洁也是要付出代价的,罗欧语失去了错误校正这个英语与生俱来的特点。电梯里空间狭小,人多拥挤,因此乘客并没有多少个人空间,也就是说,罗欧语中的每个单词都会与其他很多单词相近,很容易发生混淆。罗欧语表示“颜色”的单词是“bofab”,如果换一个字母,把它变成“bogab”,就会得到表示“声音”的单词。“bokab”的意思是“电”,而“bolab”的意思是“味道”。更糟糕的是,罗欧语的逻辑结构导致发音相近的单词也具有相近的意思,导致我们几乎无法根据上下文的语境来判断到底是哪个词。“bofoc”“bofof”“bofog”“bofol”的意思分别是“红”“黄”“绿”“蓝”,用相近的发音来表示相似的事物有一定道理,但是,也会导致人们在嘈杂的派对上无法使用罗欧语谈论颜色,“对不起,我没有听清楚,你说的是bofoc还是bofog?”

与之相反,某些现代人造语言走到了另一个极端,过度使用了海明与香农提出的那些原则。当代最成功的人造语言之一——“逻辑语”(Lojban),严格规定所有的基本词根(或者叫作“ginsu”)都不允许有相近的发音。

海明的“距离”观与法诺的哲学观一脉相承,他认为,如果一个量与距离有相似的特点,那么这个量也可以被称作“距离”。很显然,海明并没有就此止步。在欧几里得几何学中,与给定中心点的距离小于或等于1的点集叫作圆;在维度大于2时,叫作球体。因此,我们把与某个代码字的海明距离不超过1的代码块的集合叫作“海明球体”,该代码字位于海明球体的中心。要想具有错误校正能力,编码中的所有代码块(如果真的要用几何学来类比,就是所有的点)与两个不同代码字的海明距离就不能都小于或等于1,换言之,我们要求以不同的代码字为中心的海明球体不能有交叉点。

因此,在构建错误校正码时,与经典几何学一样,也需要解决“球体填充”(sphere packing)的难题,即如何把一堆大小相同的球体填充到狭小的空间中,使它们尽可能地紧密排列而且所有球体互不重叠。换一个更简洁的说法:盒子中可以装多少个橙子?

球体填充问题由来已久,比错误校正码出现的时间要早得多,甚至可以追溯至天文学家约翰尼斯·开普勒(Johannes Kepler)的时代。1611年,开普勒写了《关于六角雪花》(Strena Seu De Nive Sexangula)的小册子。尽管这个书名非常具象化,但是开普勒在书中思考的却是天然形状的起源这个大问题。雪花与蜂巢为什么是六边形,而苹果的种子却是五五排列呢?现在,与我们关系最密切的此类问题是:为什么石榴的种子通常有12个面呢?

下面是开普勒的解释:石榴希望在果实中装入尽可能多的种子,也就是说,它在尝试解决球体填充问题。如果我们认为大自然总能找到解决问题的最佳途径,石榴就应该是球体填充的范例。开普勒认为,下面的结构是最紧密的球体填充方式。从平面图来看,第一层的种子应该是以下图所示的规则、整齐的方式排列在一起的。

第二层与第一层相同,不过每颗种子都非常巧妙地置身于由位于下一层的3颗种子所构成的三角形的狭小空间中。然后,以同样的方式添加其他层。我们需要注意的是:每层有一半的间隙要用于盛放上一层的“球体”。因此,在填充每一层时,我们需要选择在哪些间隙中填充这些球体。最常见的选择方案叫作“面心立方晶格”(face-centered cubic lattice),该方案有一个非常好的特性:每层球体的位置正好位于自该层起下方第三层球体的正上方。开普勒认为,这是球体填充最紧密的方法。在面心立方晶格中,每个球体正好接触12个球体。开普勒猜想,石榴种子在逐渐长大的过程中,每颗种子会挤压与之相邻的12颗种子,因此接触点附近的表面会变平,最终形成他观察到的十二面形。

我不知道开普勒的石榴论是否正确,但是,几百年来,他的“面心立方晶格是最紧密的球体填充方式”的论断,一直为数学界津津乐道。开普勒没有提供任何证明,很显然,在他看来,面心立方晶格理论是不可能被推翻的。一代代的食品杂货商都与开普勒的观点一致,他们在堆放橙子时一直采用面心立方晶格这种方法,而从来不考虑这是不是最佳做法。不过,苛求的数学家希望能找到铁证,而且,他们关心的不仅限于圆与球体。进入理论数学的研究领域之后,我们自然会超出圆与球体的范畴,研究维度超过三维的所谓超球体填充问题。射影几何学的研究成果拓展了错误校正码理论的视野,那么高维的球体填充问题也会推动编码理论的发展吗?这一次的情况与人们的初衷几乎背道而驰,人们深入研究编码理论取得的突出成果,反过来对解决球体填充问题起到了推动作用。20世纪60年代,约翰·里奇(John Leech)利用戈利发明的一种编码,构建了一种紧密程度令人叹为观止的24维球体填充方法,人们称之为“里奇晶格”(Leech lattice)。在里奇晶格这个拥挤的空间里,每个24维球体同时接触196560个其他球体。我们仍然不知道这种填充方法是不是最紧密的24维球体填充法,但是,2003年,微软研究院的亨利·科恩(Henry Cohn)与阿比纳夫·库玛(Abhinav Kumar)证明,如果存在更紧密的晶格,那么这种晶格的与里奇晶格的紧密程度的比值最多为:

1.00000000000000000000000000000165

也就是说,两者非常接近。

你无须关心24维球体以及如何将它们排列在一起的问题,但是,你必须知道,像里奇晶格这种令人惊叹的数学对象肯定有非常重要的价值。事实证明,里奇晶格具有大量奇特的对称性。1968年,杰出的群理论学家约翰·康威在接触到里奇晶格之后,经过12个小时的计算,用了很多张纸,才找出了其所有的对称性。后来,这些对称性成了有限对称群的一般理论的组成部分,这些一般理论是代数学家在20世纪大部分时间里潜心研究的内容。

至于古老的三维橙子问题,研究证明开普勒说的没错,他的填充法的确是最佳方法。但是,直到大约400年之后,托马斯·黑尔斯(Thomas Hales)才于1998年完成了证明。黑尔斯当时在密歇根大学任教,他将这个问题简化为只有几千种排列方式的球体,然后借助计算机处理大量计算步骤,才完成了这个艰难的证明。数学界对于艰难的证明早就习以为常了,对于他们而言这不是问题。人们很快就发现并验证了黑尔斯的证明过程的准确性,但是,计算机完成的大量计算则难以验证。我们可以从头到尾详细检查证明过程,但是计算机程序与证明过程不同。即使人们可以检查每个代码行,又如何才能确定这些代码运行起来没有问题呢?

数学家普遍认可了黑尔斯的证明,但是黑尔斯本人却面临着一个问题。当初,证明过程对计算机的依赖让他感到有些不安,现在,虽然开普勒猜想的证明工作顺利完成了,但他依然无法释怀。于是,黑尔斯离开了让他一举成名的几何学领域,投身到对证明过程进行验证的研究中,他希望未来的数学与我们现在看到的有很大不同。他认为,无论是借助计算机还是使用纸笔完成的数学证明,都已经变得十分复杂,而且各个证明过程相互依赖,以至于我们再也没有充分的理由相信这些证明过程是正确的。康维尔对里奇晶格的分析成为“有限单群分类”的一个重要组成部分,有限单群分类这个研究项目目前已经完成,其成果表现为几百名作者撰写的几百篇论文,这些论文的篇幅总计超过1万页。据说,到目前为止还没有人能够理解其全部内容。那么,我们如何才能确定这些内容都是正确的呢?

黑尔斯认为,我们别无选择,只能另起炉灶,在可以借助计算机验证的前提下重新整合大量的数学资料。黑尔斯曾经为证明过程是否站得住脚而头疼不已,他认为,如果用于验证证明过程的编码本身便于验证(黑尔斯有充分的理由认为这个目标是可以实现的),我们就可以一劳永逸地摆脱类似的争议。然后呢?也许就是要求计算机在完全不需要人类介入的情况下可以独立完成证明过程,甚至具有思维能力。

如果这一切真的发生了,是不是意味着数学将会寿终正寝?的确如此,如果计算机在思维能力方面赶超人类,然后像某些偏激的未来主义者预测的那样,把人类当作奴隶、牲畜或者宠物,那么,数学真的会和所有东西一起灭亡。毕竟,几十年来,人们一直在利用计算机辅助数学研究。有很多种曾经被视为“研究”的计算活动,在现代人的心目中已经与10位数的求和一样不再具有创造性,也不值得称道了。只要笔记本电脑可以完成的工作,再也不能算作数学研究了。但是,数学家并没有因此失业。就像动作片的主角跑得比爆炸引起的大火蔓延的速度要快一样,数学家也总能领先于计算机影响力不断扩展的速度。

如果未来的机器智能真的可以接管大部分我们现在视为研究的工作,会怎么样呢?我们会重新分类,把那些研究工作划拨到“计算”的项目之下。而人类利用善于做定量研究的头脑所完成的全部工作,都会被称作“数学研究”。

虽然海明码的效果相当不错,但是人们想百尺竿头更进一步,毕竟海明码的效率还可以进一步提高。早在穿孔纸带与机械式继电器时代,计算机就已经可以完美地处理几乎所有7位数的代码块了。海明码似乎过于谨慎了,我们肯定可以减少向信息中添加的保护代码位数,香农的著名定理证明我们确实可以做到这一点。比如,香农认为,如果错误的发生概率为每1000位数的代码中出现一个错误,那么在应用某些编码进行处理后,信息的长度仅比编码前增加了1.2%。这些编码还不是最好的,如果逐渐增加基础代码块的长度,我们发现某些编码在达到一定的处理速度的同时,还能满足我们对信息可靠程度的任何要求。

那么,香农是如何发明这些优质编码的呢?答案是,这些编码并不是他发明的。我们在遇到像海明码这样的复杂结构时,往往会下意识地认为错误校正码真的非常特别,在设计时它们肯定会被反复修改,直到每对代码字都小心翼翼地保持彼此间的距离,而且能确保其他对代码字不得其门而入。香农的聪明才智表现在,他看出这是一个彻头彻尾的错误认识。错误校正码根本没有任何特别之处,香农成功地证明(一旦知道需要证明的内容,证明过程本身并不是特别难)几乎所有的代码字集都有错误校正的功能。换言之,没有经过任何设计的完全随机的编码也极有可能是一种错误校正码。

毫不夸张地说,这至少是一个令人震惊的新发现。假设我们接受了一个建造气垫船的任务,难道我们的第一选择是把一堆引擎零部件和橡皮管随意地扔到地上,然后指望它们能自动组装成漂浮在水面上的气垫船吗?

1986年,时隔40年之后,海明仍然对香农的证明过程敬佩不已,他说:

香农最杰出的特点之一就是他的勇气。想想他提出的主要定理,他的勇气便可见一斑。他希望发明一种编码,因为无从下手,他就写了一个随机编码。这时,他想到了一个问题:“普通的随机编码有什么作用?”他认为普通编码具有完美的随机性,因此肯定具有较高的使用价值。如果没有无与伦比的勇气,怎么会有这么大胆的想法呢?勇气是伟大科学家必备的特质,这些科学家在极度困难的情况下也会昂首阔步向前进,并不断地思考。

如果随机编码也有可能是错误校正码,那么海明码还有什么存在的意义呢?既然香农也认为随机编码有可能具有矫正错误的功能,那么我们为什么不随意选择代码字呢?这是因为这个做法会导致一个问题:编码光在理论上具有矫正错误的功能是不够的,关键是它在实践中是否能够矫正错误。如果香农编码的代码块的位数为50,代码块的总数就是50个0、1构成的不同代码块的总数,即250个,这个数字略大于1000兆。卫星接收到的信号应该是(或者至少接近于)这些代码块中的一个,但是代码块一共有1000兆个,它接收到的到底是哪一个代码块呢?如果我们必须从这1000兆个代码块中逐一甄别,就太麻烦了,因为这又是一个组合爆炸问题。因此,我们必须再次采取一种平衡的策略。像海明码这种条理清晰的编码往往更易于解码,但是事实证明,这些非常特别的编码,其效率通常比不上香农研究的那些随机编码。时至今日,几十年过去了,数学家一直在结构性与随机性这两个概念之间进退维谷,在绞尽脑汁地发明各种编码时,既希望其有足够的随机性,可以快速处理数据,又希望其有充分的结构性,以便降低解码的难度。

海明码在特兰西瓦尼亚彩票游戏中可以大显身手,但是在“Cash WinFall”彩票游戏中却一无是处。这是因为特兰西瓦尼亚彩票只有7个数字,而马萨诸塞州的彩票却有46个数字,后者需要更强大的编码。我能找到的最适合“Cash WinFall”彩票的编码就是莱斯特大学的丹尼斯顿(Denniston)于1976年发明的,这套编码真是太完美了。

丹尼斯顿列出了一个号码组合清单,其中包含285384个号码组合,都是由48个备选数字中的6个构成的。排在清单前几位的号码组合为:

前两组号码有4个数字相同,即2、3、4和48。但是,我们在这285384组号码中不可能找到有5个数字相同的两组号码,这正是丹尼斯顿清单的神奇之处。在前文中,我们把法诺平面转变成编码,同样,我们也可以把丹尼斯顿清单转变成编码:把每组彩票号码转换成由0和1构成的48位数的代码块,在与彩票号码中数字相对应的位置填上0,其他位置填上1。因此,上面的第一组号码就会变成下面这个代码块:

000011101111111111111111111111111111111111111110

由于每两组号码的6个数字中不可能有5个相同,因此,这套编码与海明码一样,每两个代码块的间距都会大于或等于4。这个结论,请大家自行验证。

也就是说,任意5个数字的组合在丹尼斯顿的彩票号码清单中至多出现一次。它的好处不仅限于此,事实上,任意5个数字的组合在丹尼斯顿的彩票号码清单中都会出现但只有一次。

由此可以想象,丹尼斯顿列举这个清单时必须非常小心。丹尼斯顿在他的论文中给出了一个用“算法语言”(ALGOL)编写的计算机程序,可以验证他的清单的确具有他所说的神奇特点。在20世纪70年代,这是非常高调的姿态。此外,他还强调,在人机合作方面,计算机的作用应严格从属于他本人所发挥的作用:“虽然我建议大家可以使用计算机验证我的研究结果,但是我要明确地告诉大家,在得出这些结果的过程中我没有使用计算机。”

“Cash WinFall”彩票游戏有46个数字,要使用丹尼斯顿系统的话,我们需要稍稍破坏后者的完美对称性,剔除其中包含47或者48的所有号码组合。这样,剩下的号码组合仍然有217833个。如果我们从藏在床底下的钱中拿出435666美元买这些号码组合,结果会怎样呢?

彩票中心会开出6个数字,比如4、7、10、11、34、46。如果这个号码组合不可思议地与你选的某组号码完全匹配,你就中了大奖。不过,即使没中大奖,你仍然有可能猜中6个数字中的5个,赢得让你满意的奖金。你买的彩票中有没有一组含有4、7、10、11、34?丹尼斯顿列举的那些号码组合中的确有一组这样的号码,除非这组号码是4、7、10、11、34、47或者4、7、10、11、34、48,导致你没法选用,否则,你绝不会与奖金失之交臂。

如果开出的是另外5个号码,比如4、7、10、11、46,结果会怎么样呢?上一次你的运气不好,因为丹尼斯顿清单中有一组号码是4、7、10、11、34、47,因此,4、7、10、11、46、47这组号码就不可能出现在丹尼斯顿清单上,否则清单上就会有两组号码有5个数字相同。换句话说,如果47这个讨厌的数字让我们错失了一次获得“6中5”奖金的机会,那么它只有这一次捣乱的机会,数字48的情况与之相同。因此,一共有6个号码组合可能会赢得“6中5”奖项:

4 7 10 11 34

4 7 10 11 46

4 7 10 34 46

4 7 11 34 46

4 10 11 34 46

7 10 11 34 46

你买的彩票肯定至少包含其中4组号码。因此,如果我们购买了217833组丹尼斯顿号码,我们就会有:

2%的概率中大奖;

72%的概率赢得6个“6中5”奖项;

24%的概率赢得5个“6中5”奖项;

2%的概率赢得4个“6中5”奖项。

我们把这种情况与塞尔比通过快速选号器随机选号的结果进行比较。塞尔比的选号策略有一个比较小的概率会被“6中5”奖项完全拒之门外,这个概率为0.3%。更糟糕的是,只中一个该奖项的概率为2%,中两个的概率为6%,中三个的概率为11%,中4个的概率为15%。因此,丹尼斯顿策略可以保证的收益在这里被风险所取代。当然,风险也有好的一面。塞尔比团队赢得6个以上该奖项的概率为32%,而根据丹尼斯顿策略选号时,中该奖项的数量不可能超过6个。塞尔比的彩票期望值与丹尼斯顿的彩票期望值,乃至所有人的彩票期望值相同,但是,丹尼斯顿策略可以让玩家免受风险的影响。要规避博彩活动的风险,仅凭购买数十万张彩票是不够的,还必须选择正确的号码。

“随机策略”团队费时费力地手工填写数十万张彩票,是不是出于这个原因呢?他们是不是利用丹尼斯顿在纯粹的理论数学研究中发明的系统,毫无风险地从彩票中心圈钱牟利呢?在探究这个问题时,我遭遇了一次挫折。我成功地与卢玉然取得了联系,但他并不清楚这些号码是如何选择的。他只是告诉我,他们大学宿舍里有一位“关键先生”,全权负责选号事务。我不确定这个人是否使用了丹尼斯顿系统或者诸如此类的系统,但是我认为,如果他没有使用这类系统,就太可惜了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈