打字猴:1.701025879e+09
1701025879
1701025880 这些7位数的代码块叫作“代码字”(code word),海明码只允许有这8个代码字。如果接收到的信息中的代码块不是其中之一,就可以肯定有地方出错了。比如,如果接收到1010001,我们就会知道它肯定不正确,因为1010001不是代码字。此外,我们接收到的这条信息与代码字1110001只有一个地方不同,而其他代码字与我们实际看到的错误信息都不可能如此接近,因此,我们可以很有把握地猜测对方想要传输给我们的代码字是1110001,也就是说,原始信息中与之对应的三位数代码块应该是111。
1701025881
1701025882 可能有人认为我们太幸运了。如果接收到的信息与两个代码字都非常接近,我们该怎么办呢?我们的判断就不会那么有把握了吧?但是,这种情况不会发生,我会告诉大家原因。我们现在回过头去研究法诺平面上的那些直线:
1701025883
1701025884 124
1701025885
1701025886 135
1701025887
1701025888 167
1701025889
1701025890 257
1701025891
1701025892 347
1701025893
1701025894 236
1701025895
1701025896 456
1701025897
1701025898 我们把这些直线输入计算机时,该怎么描述它们呢?计算机可以识别的语言只有0与1,因此,我们必须把每一条直线都转换成一连串的0与1,其中,在n处的0表示“n位于该直线上”,而在n处的1则表示“n不在该直线上”。比如,第一行的124可以写成0010111,第二行的135可以写成0101011。
1701025899
1701025900 我们发现,这两个代码块都是海明码的代码字。实际上,海明码中的7个非零代码字正好对应法诺平面上的7条直线。因此,海明码(还包括特兰西瓦尼亚彩票的最佳号码组合)与法诺平面是完全相同的数学研究对象,只不过改头换面了!
1701025901
1701025902 这就是海明码隐藏得很深的几何特性。代码字是法诺平面上可以构成直线的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,效率更高。
1701025903
1701025904 海明码及随后出现的功能更加强大的错误校正码,推动了信息工程学的发展。构建有重重保护和双重检查模式的系统以确保信息传输无误,已经不再是人们追求的目标。海明与香农的研究足以将错误发生的频率降至非常低的程度,无论有什么样的噪声,灵活机动的错误校正码都可以消除它们造成的影响。火星轨道飞船“水手9号”在把火星表面的照片发回地球时使用的阿达玛码,就是具有这种效果的错误校正码。光盘在编码时采用的是里德所罗门码,即使光盘上有擦痕也不会有多大影响。(1990年之后出生的读者,如果对光盘不太了解,可以想一想闪盘驱动器的情况。在这些驱动器中,人们为了防止数据损毁,使用了与里德所罗门码类似的博斯–乔赫里–霍克文黑姆码。)银行的汇款路线号码由一种叫作“检验和”(checksum)的简单编码构成。这种编码不是错误校正码,而是与“每个比特重复两遍”的信息协议比较相似的错误检测码。如果一个数字输入错误,执行汇款交易的计算机可能无法知道我们真正想要输入的数字是几,但是它至少知道出了问题,从而避免我们把钱汇到错误的银行账户中。
1701025905
1701025906 我们不清楚海明是否全盘了解他的这项新技术的适用范围,但是在他准备发表这项研究成果时,他发现贝尔实验室的老板精于此道。
1701025907
1701025908 专利部一定要等到申请了专利之后才同意我发表这个成果……我不相信一堆数学公式也能申请专利。我告诉他们,这是不可能的。但是他们说:“看我们的吧。”他们成功了。从此以后,我知道我对专利法的理解太肤浅了,因为我觉得某些东西应该不能申请专利(或者为这些东西申请专利是不道德的),但他们却常常能成功地申请到专利权。
1701025909
1701025910 数学前进的步伐比专利办公室快。瑞士数学家、物理学家马塞尔·戈利(Marcel Golay)从香农那里听说了海明的想法之后,发明了大量的新编码。但他不知道海明本人已经开发了很多相同的编码并且申请了专利,他发表了自己的编码,导致双方就这项荣誉的归属权产生了纠纷,直到现在尚无定论。贝尔实验室得到了这项专利权,但是,依据1956年一个反垄断协议的条款,他们失去了有偿授权的权利。
1701025911
1701025912 海明码为什么能够奏效呢?要理解这个问题,我们必须反过来思考:在什么情况下,海明码无法发挥作用?
1701025913
1701025914 别忘了,最让错误校正码头疼的问题是,一个代码块与两个代码字都非常接近。收到这串令人讨厌的比特之后,接收方会无所适从,因为没有任何基于既定规则的方法可以帮助他们判断原始信息中包含的到底是哪一个代码字。
1701025915
1701025916 我们似乎使用了比喻这种修辞格,因为代码块和代码字都没有固定位置,为什么我们可以说一个代码块“接近”另一个代码字呢?海明在信息论概念方面的伟大贡献之一,就是强调这个说法不仅仅是比喻,甚至不需要冠上“比喻”之名。他为距离赋予了一个新的含义,现在人们称之为“海明距离”(Hamming distance)。海明距离在年轻的信息数学中的意义,同欧几里得和毕达哥拉斯心目中的海明距离在平面几何中的意义没有任何不同。海明给出的定义非常简单:两个代码块的海明距离就是把一个代码块变成另一个代码块时需要改变的比特数。比如,代码字0010111与0101011的间距是4,因为要把第一个代码字变成第二个代码字,我们需要改变排在第二、第三、第四和第五位的比特。
1701025917
1701025918 海明用8个代码字构建的海明码之所以能取得非常好的效果,是因为任何包含7个比特的代码块与两个不同代码字之间的海明距离不可能都小于1。否则,这两个代码字彼此之间的海明距离就会小于2。但是,两个代码字之间仅有两个比特不同的情况是不存在的。事实上,任意两个代码字的海明距离至少是4。我们可以把代码字想象成被束缚在原子核周围的电子,或者电梯中性格孤僻的人。他们都位于一个狭窄的空间中,并且尽可能地保持彼此之间的距离。
1701025919
1701025920 经受得住噪声干扰的所有通信方式都是以这个原则为基础的,我们日常使用的语言就是这样。如果我把“language”(语言)写成了“lanvuage”,你们肯定知道我想要说什么,因为在英语中没有其他单词与“lanvuage”仅有一个字母不同。但是,如果你写的是一些比较短的单词,例如,“dog”(狗)、“cog”(齿轮)、“bog”(沼泽)和“log”(木材),前面的推理方法就不管用了,因为这些事物在英语中出现的频率都不少,如果噪声掩盖了第一个字母的发音,你就不大可能知道对方到底说的是哪一个单词。但是,即使在这种情况下,你仍然可以借助语境修正错误。咬人的很可能是“dog”,你可能是从“log”上面掉下来的,等等。
1701025921
1701025922 我们有可能提高语言的效率,但是,如果我们真的这样做,就会破坏香农发现的那种严格的平衡性。很多书呆子和(或者)有数学信仰的人曾历经艰辛,创造了可以准确传递信息的简洁语言,这种语言没有英语等语言中存在的冗长、同义和歧义等问题。1906年,牧师爱德华·鲍威尔·福斯特(Edward Powell Foster)创造了一门叫作“罗欧语”(Ro)的人造语言。他的目的是弃用英语的海量词汇,代之以可根据逻辑由读音推导出语义的单词。麦尔威·杜威(Melvil Dewey)的“杜威图书十进制分类法”虽然把公立图书馆的书架管理得井井有条,但该分类法就像罗欧语一样严格死板,因此,杜威热衷于罗欧语这个事实可能并不令人吃惊。罗欧语的确非常简洁,英语中很多比较长的单词,例如“ingredient”(配料),在罗欧语中就简短得多,写作“cegab”。但是,简洁也是要付出代价的,罗欧语失去了错误校正这个英语与生俱来的特点。电梯里空间狭小,人多拥挤,因此乘客并没有多少个人空间,也就是说,罗欧语中的每个单词都会与其他很多单词相近,很容易发生混淆。罗欧语表示“颜色”的单词是“bofab”,如果换一个字母,把它变成“bogab”,就会得到表示“声音”的单词。“bokab”的意思是“电”,而“bolab”的意思是“味道”。更糟糕的是,罗欧语的逻辑结构导致发音相近的单词也具有相近的意思,导致我们几乎无法根据上下文的语境来判断到底是哪个词。“bofoc”“bofof”“bofog”“bofol”的意思分别是“红”“黄”“绿”“蓝”,用相近的发音来表示相似的事物有一定道理,但是,也会导致人们在嘈杂的派对上无法使用罗欧语谈论颜色,“对不起,我没有听清楚,你说的是bofoc还是bofog?”
1701025923
1701025924 与之相反,某些现代人造语言走到了另一个极端,过度使用了海明与香农提出的那些原则。当代最成功的人造语言之一——“逻辑语”(Lojban),严格规定所有的基本词根(或者叫作“ginsu”)都不允许有相近的发音。
1701025925
1701025926 海明的“距离”观与法诺的哲学观一脉相承,他认为,如果一个量与距离有相似的特点,那么这个量也可以被称作“距离”。很显然,海明并没有就此止步。在欧几里得几何学中,与给定中心点的距离小于或等于1的点集叫作圆;在维度大于2时,叫作球体。因此,我们把与某个代码字的海明距离不超过1的代码块的集合叫作“海明球体”,该代码字位于海明球体的中心。要想具有错误校正能力,编码中的所有代码块(如果真的要用几何学来类比,就是所有的点)与两个不同代码字的海明距离就不能都小于或等于1,换言之,我们要求以不同的代码字为中心的海明球体不能有交叉点。
1701025927
1701025928 因此,在构建错误校正码时,与经典几何学一样,也需要解决“球体填充”
[ 上一页 ]  [ :1.701025879e+09 ]  [ 下一页 ]