zoukankan      html  css  js  c++  java
  • 计算机基础:海明码是什么?

    海明码:奇偶校验码的一种扩充。只能检验和恢复一位。

    例如:
    求1011 的海明码?
    答案:1010101  
    其中 :红色所在位数 1,2,4,8,... 为计算出的验证码,
                黑色的信息为原信息码:1011。

    计算方法:

    1.先计算需要几位海明码?

    1011 是四位 ,
    它有四种只错一位的情况,(0011,1111,1001,1010)
    再加上x位海明码的错一位情况。
    再加上一种全部位都正确的情况。
    所以海明码需要    x+4+1 中可能。
    所以需要海明码x位可以表示出 x+4+1 中可能。
    即: x+4+1 <=2**x  (2**x 表示2的x方),计算得到3,
    海明码最少是3,当然4,5,6位都可以,就像用101 校验 和0101  00101 000101 00000000101 都能校验一样,只是比较浪费。
    所以计算出了海明码的位数为3。(其实也就是往原编码内填充1,2,4,8,16,这些地方,填完为止。)

    2. 开始计算。

    1011 中间插入三位验证码
     
    位数 7 6 5 4 3 2 1
    信息 1 0 1 x 1 x x



    在第7位:
    7=2**2+2**1+2**0=4+2+1
    6 对应位置为0,不算在内。
    5=2**2 +2**0 = 4 +1
    3=2**1+2**0 =2+1
    这样得到
    (2**0) 出现三次,所以在最低位 为1 ,(出现偶数次就是0,奇数次就是1,)(原计算方法是用异或计算 1 xor 1 =0 , 1xor 0 =1 , 0 xor 0=0 ,这里结果都一样)
    (2**1)出现两次,所以第二位是0,
    (2**2)出现两次,所以第三位是0,
    所以就得到
    位数 7 6 5 4 3 2 1
    信息 1 0 1 0 1 0 1


     

    3.验证和举例

    我们传输这个得到的海明码 ,和一个错误的海明码:
    正确的验证 1010101 :
    1.得到海明码(1,2,4 位,如果更长的话就是8,16,32。。。位)001。
    2.信息码为剩下的 1011,同步骤二:计算得到001,  
    3.和上面的到的海明码001 异或 (001 xor 001 ) =000,正确
    错误的验证 1110101 :
    1.得到海明码 001。
    2.信息码1111 ,计算:
      7=2**2+2**1+2**0=4+2+1
      6=2**2+2**1 =4+2
      5=2**2 +2**0 = 4 +1
      3=2**1+2**0 =2+1
      (2**0)出现3次,(2**1)出现3次,(2**2)出现3次。 得到海明码:111
    3.和上面的到的海明码001异或(111 xor 001)=110 =6 代表是第六位出错,也即是1110101 改为1010101。
     
    最后再重申一下:
    海明码是只能验证和恢复一位,两位三位同时错的话是无效的。
     
  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/wanself/p/2701429.html
Copyright © 2011-2022 走看看