• 计算机基础:海明码是什么?


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

    例如:
    求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。
     
    最后再重申一下:
    海明码是只能验证和恢复一位,两位三位同时错的话是无效的。
     
  • 相关阅读:
    9.Vue技术栈开发实战-使用Mock模拟Ajax请求
    8.Vue技术栈开发实战-Ajax请求实战
    7.Vue技术栈开发实战-状态管理Vuex进阶
    6.Vue技术栈开发实战-状态管理Vuex(二)
    5.Vue技术栈开发实战-状态管理Vuex(一)
    4.Vue技术栈开发实战-状态管理bus的使用
    3.Vue技术栈开发实战-路由进阶篇
    2.Vue技术栈开发实战-路由基础篇
    Vue技术栈开发实战_汇总贴
    1.Vue技术栈开发实战-使用vue-cli3创建项目
  • 原文地址:https://www.cnblogs.com/wanself/p/2701429.html
Copyright © 2020-2023  润新知