前言
2021.11.16今天讲的海明码和CRC码真的是阴间,但是能想出创造出这些东西的一定都是大数学家、都是天才。
正文
简单说一说海明码为什么能检测出错误的位数(假设错误位有且只有一位):
- 课间的时候同学告诉我这个可以用老鼠实验来理解,对应的题目如下:
原文链接:老鼠试药——二进制算法 - 简单来说毒药那一瓶就是所有死去老鼠喝的药水对应的交集,又因为每个老鼠都能确定一位,有药的那瓶自然就确定下来了
- 汉明码中插入的k位检测位对应k只老鼠
- 为什么要按照Ci(i=1,2,4…)的位置将检测位插入到原码中?
对应到题目中就是对应二进制中只有一个1的水瓶作为老鼠(001,010,100),个人理解这样做的目的是后期算Pi的时候方便。 - Ci检测的位数(药水瓶)就是编号转化到二进制中log(2)i(log(2)i=1,2,3…|i=1,2,4…)位均为1的所有编号
- Pi用来表示按照配偶(奇)原则下得到的检测位(老鼠的状态),表示检测的一组中是否存在错误位(对应的老鼠是否死掉了)
- 最后按照得到的Pi,转化成十进制数就得到了出错位。
- 以8瓶药水中第6瓶药水有毒为例
- 0100111海明码
- 0100101纠正后
- 数据0101
- 配偶原则 C1=0,C2= 1,C4=0
- 插入其中0100101
- 传输错误0100111(第六瓶有毒)
- 检测P1=0,P2=1,P4=1(死了2只)
- P4P2P1=110对应错误位为6