zoukankan      html  css  js  c++  java
  • 海明码计算

    海明码在计算的时候, 根据数的位置进行分组

    例如在一个4位的数中, 将位置以二进制表示, 并分 xx1, x1x, 1xx三组(如上图)

    然后为每组设置一个校验位

    需要保证校验位数(r)+原位数要 小于 r位二进制能表示的位置 , 并且按照上面的分组原则, 还虚每组有一个校验位

    即原数据为k位, 校验位为r位

    k+r <= 2^r - 1 (因为从1开始计算位置, 所以需要减1)

    如上例, 4 + 3 <= 2^3 - 1

    加入校验位之后, 我们将校验位放在每组的最前边, 例xx1组, 就把校验位放在001的位置上, 对于一个校验位为4位的海明码来说, 他的分组和校验位如下:

    第一个校验位校验xxx1组, 校验位位于0001(1)

    第二个校验位校验xx1x组, 校验位位于0010(2)

    第三个校验位校验x1xx组, 校验位位于0100(4)

    第四个校验位校验1xxx组, 校验位位于1000(8)

    对于任意位的海明码, 校验位总是位于2^n位上.

    然后将原数据插入到非校验位的地方, 并根据新的位置, 计算每一组数据的校验和

    例如第一组, 我们称校验位为P, 第一组的校验位为P1

    P1则为第一组所有元素的偶(奇)校验和

    其他组依据相同方法计算

    在接收到数据之后, 我们对所有分组分别进行偶(奇)校验, 即可验证数据是否正确

    对于1位的错误

    假如错的是数据位, 则根据与其相关的所有校验位, 我们可以唯一确定错误的位置

    假如错的是校验位, 则只有该组数据的校验位错误, 同样可以确定位置

    后边写的还是不太清楚, 请参考维基百科https://zh.wikipedia.org/wiki/%E6%B1%89%E6%98%8E%E7%A0%81

  • 相关阅读:
    从C#角度 单例模式 懒汉和饿汉
    从C#角度 理解MVC原理
    总结下 简单工厂-》工厂-》抽象工厂
    尝试加载Oracle客户端库时引发BadImageFormatException
    org.springframework.dao.DuplicateKeyException: 问题
    写出严谨的代码
    Spring基础入门之IoC注入
    javaIO流小结(1)
    java入门之异常处理小结
    static关键字使用
  • 原文地址:https://www.cnblogs.com/NyaSu/p/9906271.html
Copyright © 2011-2022 走看看