1701025832
101 111 111 000 111 000 111……
1701025833
1701025834
这条信息不会对卫星造成任何损坏,因为卫星知道第一个片段中的三个比特应该是000或者111,而101意味着信息传输有问题。如果原始信息是000,宇宙射线必须篡改两个比特才会得到101这个结果。宇宙射线篡改信息的发生概率极低,一下篡改两个比特的可能性非常小。所以,卫星有足够的把握来处理这个问题:如果这三个比特中有两个是1,那么原始信息很有可能是111。
1701025835
1701025836
上文介绍的是“错误校正码”(error-correcting code)的一个范例。错误校正码是一种通信协议,可以帮助接收方消除信号中噪声所导致的错误。信息论的几乎所有概念都来自克劳德·香农(Claude Shannon)于1948年发表的里程碑性质的论文——“通信的数学原理”(A Mathematical Theory of Communication)。
1701025837
1701025838
“通信的数学原理”这个题目是不是有炒作的嫌疑啊?难道通信这种人类的基本活动也可以变成冷冰冰的数字与公式吗?
1701025839
1701025840
在这里,我要温馨提示或者强烈建议大家:只要有人声称借助数学方法可以解释、征服或者彻底了解这样或那样的事物,我们都不可以盲目相信。
1701025841
1701025842
然而,由于数学技术手段越来越广博、越来越丰富,数学家不断找到各种方法处理传统观点认为不属于数学领域的那些问题,因此,数学史就是一部扩张史。概率论现在听起来稀松平常,但人们一度认为这是自不量力的表现,因为数学研究的是各种必然性与事实,而不是随机性与可能性之类的问题。在帕斯卡、伯努利等学者为偶然性的作用机制创建了数学定理之后,一切都发生了翻天覆地的变化。“无穷大理论?我没听说过这个概念”,在19世纪格奥尔格·康托尔(Georg Cantor)发表他的研究成果之前,就像神学与科学相互冲突一样,概率论与数学也是格格不入的。但是现在,对于康托尔提出的那些无穷级数,我们已经非常了解,足以教授数学专业一年级的学生了。(当然,学生们第一次接触这些概念时的确会大吃一惊。)
1701025843
1701025844
这些数学上的形式主义在描述某个现象时,不会表现其所有细节,而且它们也没有这种打算。例如,概率论对某些随机性问题就无能为力。在某些人看来,超出数学研究范围的问题才是最有意思的问题。但是,在当今社会,如果思考可能性问题时根本不使用概率论,那肯定是错误的。如果大家不相信,可以问一问詹姆斯·哈维。当然,如果问那些把钱输给哈维的人,效果会更好,因为他们的体会更深。
1701025845
1701025846
是否有与意识、社会或者美学相关的数学理论呢?毫无疑问,人们正在做这方面的尝试,但是到目前为止,进展仍然非常有限。如果有人宣称他们取得了突破,那么我们应该本能地不相信他们,但是我们也应该认识到,他们有可能真的取得了某些重要突破。
1701025847
1701025848
起初,人们觉得错误校正码可能并不是一个革命性的数学成果。在嘈杂的派对上,我们重复自己说的话,就可以解决问题。但是,这种解决方案是需要成本的。如果我们在发送信息时,把每个比特都发三遍,这条信息的长度就会是原始信息的三倍。对于派对上的交流而言,这可能不会有任何影响,但是,如果我们想让卫星在一秒钟之内打开右推进器,就有可能出问题。香农在他的那篇关于信息论的论文中指出,时至今日,工程师们仍然面临着一个基础性难题:信号抗噪声干扰的能力越强,传输这条信息的速度就会越慢,如何在两者之间取得平衡呢?噪声的出现,为传输渠道在固定时间内精准传送的信息长度设置了上限,香农把这个限度称作通信渠道的信息传输能力。水管可以输送的水量是有限的,同样,通信渠道的信息传输能力也是有限的。
1701025849
1701025850
“重复三遍”的通信协议会把通信渠道的信息传输能力降至1/3,而我们在矫正错误时并不一定需要承担这么大的损失。我们有更好的办法,香农非常了解这个办法,因为这个办法是他在贝尔实验室的同事理查德·海明(Richard Hamming)提出来的。
1701025851
1701025852
海明是位年轻的数学家,很早就加入了“曼哈顿计划”。他有贝尔实验室重达10吨的第五代机械继电器式计算机的低级使用权,只能在周末时使用这台计算机运行他编写的程序。但是,这台计算机有个问题,只要发生机械故障,海明的计算就只能中止,直到星期一上午才有人重新启动这台机器。这让海明非常恼火,要知道,生气是技术进步的一个重要激励因素。海明想,如果这台机器可以自己纠正错误,永远不会死机,情况不就能大大改观吗?由此,他想到了一个办法。跟卫星信息传输一样,人们在这台计算机上输入的内容可以看成是一连串的0与1。至于这两个数字是数据流中的比特、继电器的开关状态还是纸带上的小孔(当时技术水平下的数据界面),人们根本不关心。
1701025853
1701025854
海明采取的第一个步骤是将信息分割成一个个代码块,每个代码块由三个数字组成,比如:
1701025855
1701025856
111 010 101……
1701025857
1701025858
“海明码”(Hamming code)是一种把三位数的代码块转换成7位数的代码块的规则,其密码本为:
1701025859
1701025860
000 → 0000000
1701025861
1701025862
001 → 0010111
1701025863
1701025864
010 → 0101011
1701025865
1701025866
011 → 0111100
1701025867
1701025868
101 → 1011010
1701025869
1701025870
110 → 1100110
1701025871
1701025872
100 → 1001101
1701025873
1701025874
111 → 1110001
1701025875
1701025876
经过编码之后,上述信息就会变成:
1701025877
1701025878
1110001 0101011 1011010……
1701025879
1701025880
这些7位数的代码块叫作“代码字”(code word),海明码只允许有这8个代码字。如果接收到的信息中的代码块不是其中之一,就可以肯定有地方出错了。比如,如果接收到1010001,我们就会知道它肯定不正确,因为1010001不是代码字。此外,我们接收到的这条信息与代码字1110001只有一个地方不同,而其他代码字与我们实际看到的错误信息都不可能如此接近,因此,我们可以很有把握地猜测对方想要传输给我们的代码字是1110001,也就是说,原始信息中与之对应的三位数代码块应该是111。
1701025881
[
上一页 ]
[ :1.701025832e+09 ]
[
下一页 ]