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
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,效率更高。
[
上一页 ]
[ :1.701025853e+09 ]
[
下一页 ]