mysql 语句检错_海明码检错与纠错,经典例子讲解~

本文介绍了海明码的概念,详细阐述了海明码的理论计算和举例计算过程,展示了如何通过海明码进行数据检错和纠错,帮助理解其在数据传输中的作用。
摘要由CSDN通过智能技术生成

平凡也就两个字: 懒和惰;

成功也就两个字: 苦和勤;

优秀也就两个字: 你和我。

跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!

关注微信公众号【IT特靠谱】,每天都会分享技术心得~

海明码纠错与检错

海明码(Hamming Code)是一个能够有多个校验位。具有检测并纠正一位错误数据的纠错码。

1 海明码理论计算

假设数据位是n位,海明码的校验位是r位,则n和r必须满足关系:2^r-1>=n+r,为了确保r位校验码能校验所有的数据位,由于r位校验码所能表示的最大十进制数为2r-1,同一时候也确保各位码本身不被其它校验码校验,r取满足条件的最小值即可!

海明码的校验码位置:必须是在2^n次方位置(n从0 开始,分别代表从右边数起各自是第1、2、4、8、16……海明码位)。数据位也就是在非2^n次方的位置。

假设数据位为8位,校验位长度未知(假设为r位),那么 2^r-1>=8+r,可以推测出校验位长度r应该为4(满足2^4 - 1 = 15 >= 8 + 4 =12),即这个海明码长12位(8数据位 + 4校验位)。

令校验位为P3,P2,P1和P0,校验位占据的海明码位置为P0=2⁰=1,P1=2¹=2,P2=2²=4,P3=2³=8;令数据位为D7,D6,D5,D4,D3,D2,D1和D0,数据位从高往低占据海明码空余编码位。最后形成的海明码如下所示:

海明码位

12

11

10

9

8

7

6

5

4

3

2

1

数据位

D7

D6

D5

D4

D3

D2

D1

D0

校验位

P3

P2

P1

P0

校验码校验的数据位对应海明码位置方法:第i位校验码从当前校验码位(包含当前校验码的位置)开始,每次连续校验i位后再跳过i位。然后再连续校验i位。再跳过i位。以此类推....

也就是说:第一组:P0校验码位校验的数据码位为:第1位(也就是P0本身)、第3位、第5位、第7位、第9位、第11位.....

第二组:P1校验码位校验的数据码位为:第2位(也就是P1本身)、第3位、第6位、第7位、第10位、第11位.....

第三组:P2校验码位校验的数据码位为:第4位(也就是P2本身)、第5位、第6位、第7位、第12位.....

第四组:P3校验码位校验的数据码位为:第8位(也就是P3本身)、第9位、第10位、第11位、第12位.....

最后每组通过异或逻辑运算。使每组的运算结果为0(偶校验),就可以得出每组校验码的值。

2 举例计算海明码

问:已知二进制码为:10110110,求它的海明编码?

答:(1)二进制码的长度为8(即:n=8),需要满足公式:2^r - 1 >= n + r,则r值应该取4。因此将数据位(D7~D0)和校验位(P3~P0)填入如下表格:

(2)根据校验码校验的数据位方法得出:

P0校验位校验了P0、D0、D1、D3、D4、D6位 ====》P0⊕0⊕1⊕0⊕1⊕0应当满足偶数个1,因此P0=0

P1校验位校验了P1、D0、D2、D3、D5、D6位 ====》P1⊕0⊕1⊕0⊕1⊕0应当满足偶数个1,因此P1=0

P2校验位校验了P2、D1、D2、D3、D7位 ====》P2⊕1⊕1⊕0⊕1应当满足偶数个1,因此P2=1

P3校验位校验了P3、D4、D5、D6、D7 ====》P3⊕1⊕1⊕0⊕1应当满足偶数个1,因此P3=1

将得到的校验位(P3~P0)填入表格,如下:

(3)因此得到海明码为:101110111000,其中红色位为校验位的值!

(4)扩展:接收端获取到海明码后,通过相同的方式计算出P3~P0,然后与海明码对应的校验位值进行比较,只要有校验位的值不对,则数据传输出现错误,也就说明海明码具有检错能力。

3 举例海明码纠错

依然根据上面的例子,我们将第6位(D2)的值改为0。也就是接收端接收到的海明码为:101110011000,其中黄色位为错误数据位!如何找出并纠正错误的数据位呢?

答:(1)已知海明码长度为12位,由于校验位占据2^0、2^1、2^2、2^3、2^4,.....2^n位置,可以推断出,校验位为:第1位、第2位、第4位、第8位,也就是P3~P0。剩余的位置都是数据位了(D7~D0)。分别填入下表:

(2)用上面同样的方法计算出收到的海明码的校验位值。

根据校验码校验的数据位方法得出:

P0校验位校验了P0、D0、D1、D3、D4、D6位 ====》P0⊕0⊕1⊕0⊕1⊕0应当满足偶数个1,因此P0=0

P1校验位校验了P1、D0、D2、D3、D5、D6位 ====》P1⊕0⊕0⊕0⊕1⊕0应当满足偶数个1,因此P1=1

P2校验位校验了P2、D1、D2、D3、D7位 ====》P2⊕1⊕0⊕0⊕1应当满足偶数个1,因此P2=0

P3校验位校验了P3、D4、D5、D6、D7 ====》P3⊕1⊕1⊕0⊕1应当满足偶数个1,因此P3=1

通过对比海明码的校验位值发现:P2和P1两个校验位值是错误的。首先说明了海明码在传输过程中出现了错误!然后我们要找出并纠正错误的数据位!

(3)出错位数应该是错误的校验位之和,即:P2的位置 + P1的位置 = 4 + 2 = 6位,也就是海明码的第6位数据是错的。那么我们将第6位取反,即可纠正错误!纠正后的海明码为:101110111000

如果你有疑问或需要技术支持,关注公众号联系我吧~

3ebda29730b0e6633277154f71f55cb3.png

海明码是一种可以检错纠错的编码方法,对于一个给定的数据,它可以将其转换成一组编码,以便在传输过程进行错误检测和纠正。 对于海明码的实现,我们可以按照以下步骤进行: 1. 确定数据位数和校验位数 首先需要确定数据位数和校验位数,通常情况下,校验位数是数据位数的一个函数,函数的形式为:$2^r-1\geq m+r$,其 $m$ 表示数据位数,$r$ 表示校验位数。这个函数,$2^r-1$ 表示校验位数可以表示的最大二进制数,$m+r$ 表示总位数。我们需要找到一个满足条件的最小的 $r$ 值。 2. 构造校验位和数据位的位置关系 海明码的校验位和数据位有一定的位置关系,通常情况下,第 $2^k$ 个位置是校验位,其他位置为数据位。例如,对于一个 $m=4$ 的海明码,校验位的位置为 1、2、4,数据位的位置为 3、5、6、7。 3. 计算校验位的值 校验位的值可以通过数据位的异或操作计算得到。具体地,对于第 $i$ 个校验位,它需要检查所有包含第 $i$ 位的数据位,将它们的值进行异或操作,得到一个校验位的值。例如,对于一个 $m=4$ 的海明码,第一个校验位需要检查第 1、3、5、7 个位置的数据位,将它们的值进行异或操作,得到第一个校验位的值。 4. 将数据和校验位组成海明码 将数据和计算得到的校验位组合在一起,得到最终的海明码。例如,对于一个 $m=4$ 的海明码,数据位为 1011,计算得到的校验位为 011,最终的海明码为 1011011。 5. 检测和纠正错误 在传输过程,可能会发生数据位的错误,此时我们可以通过海明码进行检测和纠正。具体地,我们可以将接收到的海明码与原始数据进行比较,如果发现不同的位数不超过一个,则可以认为该数据没有发生错误;否则,可以根据校验位的值来确定错误的位置,并进行纠正。 希望这些步骤可以帮助你理解海明码检错纠错过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值