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。
     
    最后再重申一下:
    海明码是只能验证和恢复一位,两位三位同时错的话是无效的。
     
  • 相关阅读:
    leetcode教程系列——Binary Tree
    《Ranked List Loss for Deep Metric Learning》CVPR 2019
    《Domain Agnostic Learning with Disentangled Representations》ICML 2019
    Pytorch从0开始实现YOLO V3指南 part5——设计输入和输出的流程
    Pytorch从0开始实现YOLO V3指南 part4——置信度阈值和非极大值抑制
    Pytorch从0开始实现YOLO V3指南 part3——实现网络前向传播
    Pytorch从0开始实现YOLO V3指南 part2——搭建网络结构层
    Pytorch从0开始实现YOLO V3指南 part1——理解YOLO的工作
    让我佩服的人生 文章
    win8.1配置cordova+ionic等一系列东西
  • 原文地址:https://www.cnblogs.com/wanself/p/2701429.html
Copyright © 2011-2022 走看看