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