汉(海)明码 | “十六宫格法” 破解汉(海)明码相关题目(附软考经典例题)


一、前言

很多小伙伴在遇到“汉明码”相关的题目时,看了很多的视频,很多文章可能还是云里雾里,作者在备考软考的时候也遇到了相同的疑惑,在看了一个从油管翻译过来的视频后,总结了这个方法

二、奇偶校验码

在有关于“海明码”的题目时,就需要用到它。简单来说,就是看 二进制数中1的个数;一般我们采用 偶校验,即 二进制数中1的个数为偶数

三、海明码概念

  • Pi校验位

  • Di数据位

  • Hi海明码

  • Pi 的海明码在第 2i-1 的位置

  • 数据位是n位,校验位是k位,则 2k-1 ≥ n+k

四、十六宫格法

1.概述

简单来说,就是将校验码位和数据位填入一个4×4的格子内,并通过这个方法来求一个数据的海明码

2.原理

为了最大效率的检测出是哪一位数据出错,所以采用以下方法:

  • 第一次:检测第2、4列,即下图所示,看这两行中1的个数是否为偶数(这里用到的就是上面所说的偶校验方式)如果个数是偶数,那么这两行数据没有出错,或者有2个及以上偶数个错误,但是在我们做题中不考虑这种情况,默认错误的位数为1

在这里插入图片描述

  • 第二次:检测第3、4列,如下图所示,同理,看这两行中1的个数是否为偶数(这里用到的就是上面所说的偶校验方式)如果个数是偶数,那么这两行数据没有出错,或者有2个及以上偶数个错误,但是在我们做题中不考虑这种情况,默认错误的位数为1

在这里插入图片描述

  • 第三次:检测第2、4行,如下图所示,看这两行中1的个数是否为偶数(这里用到的就是上面所说的偶校验方式)如果个数是偶数,那么这两行数据没有出错,或者有2个及以上偶数个错误,但是在我们做题中不考虑这种情况,默认错误的位数为1

在这里插入图片描述

  • 第四次:检测第3、4行,看这两行中1的个数是否为偶数(这里用到的就是上面所说的偶校验方式)如果个数是偶数,那么这两行数据没有出错,或者有2个及以上偶数个错误,但是在我们做题中不考虑这种情况,默认错误的位数为1

在这里插入图片描述

3.填写校验位

由于我们都采用的二进制数,那么第一个格子对应的就是0000,化作十进制就是第0号位置注意这里的位置号与海明码Hi是有区别的从左到右,从上到下依次是015。前面已经说了**校验码的位置是第2i~个位置**,那么我们就可以把校验位先填入其中在这里插入图片描述

4.填写数据位

这里会比较绕,建议大家在第一次看文章的时候可以亲自动手操作一下,为了方便大家理解,这里举的例子是 ==《软件设计师教程》P12的例1.6==如果没有书也没有关系,题目如下

设数据为01101001,试采用4个校验位求其偶校验方式的海明码

第一步
首先我们画出12根横线(8个数据位+4个校验位),从右向左,从1开始数,第1、2、4、8个位置用来放我们的校验码,先空着,剩下的 从左向右填入横线中

这里画横线填写数据的意义是方便大家将数据填入十六宫格中

在数的时候记得给每个空格标上数,数据位用D表示,校验位用P表示

在这里插入图片描述

第二步
将D0 至 D7依次填入十六宫格中, 从P1后的位置填写 如果发现填不满也没有关系,剩下的可以空着,第一个格子先不要填写任何数字

在这里插入图片描述
第三步

将数据位对应的数字填入其中后,采用偶校验的方式补全校验位

例如
P1校验:第二列和第四列,P1、D1、D4、D0、D3、D6 这几位对应数字:0、0、1、1、1有3个1,那么为了确保数据准确,需要偶数个1的话,P1应该为1,这样这两列就有4个1

以此类推可以算出每一个校验位

5.填写十六宫格首位

在开头说了,如果有偶数个1的话可能有2个及以上的偶数个错位或者没有错误,为了保证数据准确性,在填写完十六宫格后要数所有格子内1的个数,并保证1的个数为偶数个

如果1的个数是奇数个,那么首位为1,如果为偶数个,首位为0

五、结语

海明码虽然现在使用已经不多了,但是在面临考试的时候依然是难点,希望本文能给与大家帮助,有任何问题可以留言评论

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alita11101_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值