给我3min,试一试说明白海明码

简介: 给我3min,试一试说明白海明码

一、介绍

学到海明码的各位是在哪里遇到的了,计算机组成原理?计算机网络?还是我们的软考?他是继我们基偶校验码、循环冗余码之后学到的一个新的编码,说到这里,也就是去校验我们传输过程中的数据是否正常,同时还可以自动纠错,下面和这个小例子一起代入。

二、小栗子

我们的是一个六位数的数据

现在依据原先的公式x为我们校验位,n为我们数据位

得出我们应该会有4位校验位分别为p1、p2、p3、p4

2^4-1>=4+6

记住我们校验位始终都是从2的0次方开始排序,也就是p1(2的0次方)、p2(2的1次方)、p3(2的2次方)、p4(2的3次方)

对于数据位,我们选择按照循序补空插入,补全后是这个样子,这里我们把每一个序号对应的二进制写上

现在就到了很多朋友蒙的地方了,求我们的p1、p2、p3、p4会有这几个式子,这几个式子怎么来,我们分解一下

记得我们刚刚写的二进制吗,我们把他们一一对上来看

现在是不是很清楚了,然后我们所求p的值其实他所对应位置上的二进制1的位置(因为每一次都是2的次方所以只会有一位1),然后去我们后面那些数据位的二进制上面去找,如果上面有相同位置的1,就和她一起做异或运算。

然后对于,已知数据位,求他的校验位,这个也就很简单了

数据位         校验位
D1(位置3)     P1(位置1)+P2(位置2)
D2(位置5)     P1(位置1)+P3(位置4)
D3(位置6)     P2(位置2)+P3(位置4)   //别杠,说为什么不写成P1(位置1)+P1(位置1)+P3(位置4)按照最大的来

三、小唐的理解

其实有一个问题就是很多人问为什么海明码能纠错一位,有人能给出证明吗?

我是这样理解的,有点类似于我们排除法

比如说,我现在D1错了

是不是变成这样了,然后我们去看,这样上面两行就是有问题,但是我们下面两行是没有问题的呀

也就是说我们D2、D3、D4、D5、D6都是正确的

我们再带回上诉式子,不就是我们D1错了,如果超过两位错了,我们是无法排查出来的,这个有兴趣的可以试一试

以上就是小唐的全部理解了,有啥不对还请指正!!!
也欢迎和小唐继续讨论!!!

相关文章
|
10月前
|
JavaScript 前端开发
JavaScript随手笔记 --- 对数据进行判断最大位数是否超过八位
JavaScript随手笔记 --- 对数据进行判断最大位数是否超过八位
|
5月前
|
机器学习/深度学习 算法
让星星⭐月亮告诉你,HashMap之tableSizeFor(int cap)方法原理详解(分2的n次幂和非2的n次幂两种情况讨论)
`HashMap` 的 `tableSizeFor(int cap)` 方法用于计算一个大于或等于给定容量 `cap` 的最小的 2 的幂次方值。该方法通过一系列的无符号右移和按位或运算,逐步将二进制数的高位全部置为 1,最后加 1 得到所需的 2 的幂次方值。具体步骤包括: 1. 将 `cap` 减 1,确保已经是 2 的幂次方的值直接返回。 2. 通过多次无符号右移和按位或运算,将最高位 1 后面的所有位都置为 1。 3. 最终加 1,确保返回值为 2 的幂次方。 该方法保证了 `HashMap` 的数组容量始终是 2 的幂次方,从而优化了哈希表的性能。
59 1
|
9月前
|
存储 机器学习/深度学习 关系型数据库
求求你不要再用offset和limit了
求求你不要再用offset和limit了
54 1
|
9月前
|
算法
算法特训,AB5 .点击消除BC.149简写单词牛客.除2!牛客.Fibonacci数列
算法特训,AB5 .点击消除BC.149简写单词牛客.除2!牛客.Fibonacci数列
|
算法 测试技术 C#
C++前缀和算法的应用:石头游戏 VIII 原理源码测试用例
C++前缀和算法的应用:石头游戏 VIII 原理源码测试用例
|
C语言
透过猜数字的小游戏来重新认识和学习随机数(rand())和时间函数(time(NULL))
透过猜数字的小游戏来重新认识和学习随机数(rand())和时间函数(time(NULL))
|
存储 自然语言处理 C语言
你学废了Python的max函数与min函数的妙用吗?
你学废了Python的max函数与min函数的妙用吗?
272 0
你学废了Python的max函数与min函数的妙用吗?
《蓝桥杯每日一题》dfs·AcWing3502. 不同路径数
《蓝桥杯每日一题》dfs·AcWing3502. 不同路径数
89 0
|
Python
Python: 1029 旧键盘_关于我只用了3min这件事
Python: 1029 旧键盘_关于我只用了3min这件事
83 0