转载请注明出处,谢谢!

最近在复习汉明码,上计算机组成原理的时候学过了,可是老师讲的实在是太水。于是过了好几个月我再次用“人话”来解释什么是汉明码。最讨厌故弄玄虚装腔作势的讲解了,晦涩难懂,根本理解不了= = ,能不能说人话。

不明白的欢迎留言评论哈~

想要理解汉明码首先要知道“奇偶校验”这个东西。这个东西很简单。

我们约定一串编码里1的个数是偶数个,那么这串编码里携带的信息就是对的,否则就是错的。

我们可以在开头对这串编码加一位校验码实现奇偶校验。

for example:

我们想传输10010这串码,那么在传输的时候,就传010010,其中在开头的0就是校验位。

我们想传输10000这串码,那么在传输的时候,就传110000,其中在开头的1就是校验位。

两个例子的1的个数都是偶数。

好了,接下来可以讲汉明码了。

首先汉明码是采用奇偶校验的码。它采用了一种非常巧妙的方式,把这串数字分了组,通过分组校验来确定哪一位出现了错误。

第一个问题,检错原理。

它的原理可以通过一个例子来说明。

因为在传输过程中,最最最可能的是只错一位数据,所以,

汉明码默认一串数据只错一位

我们假设想传这一列数据1234567,我们先把他们分个组(当然怎么分组的我们等会儿再讨论),如图。

转载请标明出处

P1组:1,2,3,4

P2组:2,4,5,7
P3组:3,4,6,7

tips:最好把这个图花在你的演算纸上^_^,方便些哦~

我们约定,哪一个组出错了,就给这个组做一个1的标志。

要记得哦,只错一个数据。

比如,这次的情况是,P1组中有一个错了,P2组没错,P3组没错。

嗯,好,现在我们看图,我们看,

P2组里谁都没错,可以排除2,4,5,7这几个数据;

P3组里谁都没错,可以排除3,4,6,7这几个数据;

那么P1组里我们知道是有错的,那经过P2,P3组的对数据的排除,我们很容易知道,是1这个数据有了错误。

好,那么错一个组的情况我们讨论过了,那么错两组的情况呢?

假设P1中有个错了,P2中有个错了,P3全对了

好,同时属于P1和P2而且不属于P3的数据是哪个?对,看图,是2这个数据。

好,那么三个组的情况呢?

同时属于P1、P2、P3组的数据是谁呢?对,是4这个数据。

好,这种分组,这种方式是不是很爽呢?汉明码就是利用了这种分组,这样它就可以很简单地分辨出哪一个数据出错,这种可以检测出数据出错的能力叫做“检错”,一定要和“纠错”分开,检错只能检测到错误不一定能改过来错误,纠错是可以的。

知道那个图的原理就好,现在扔掉它。

下一个问题,校验码的位置。

这是规定,记住它,在采用汉明码的一串数据中,2的i次方的位置上,我们放校验码。

校验码是1,或者是0,使得校验码所在的组的1的个数是偶数。

如图:

绿色的位置是放校验码的地方,1,2,4,8,16……等等,2的i次方的地方。

下一个问题,汉明码是怎么分组的呢?

我们看到,其实有些数据是既在P1组又在P2组的。

怎么分组,这个要记住,没啥原理了哈哈。

要预先做的工作是,

把表示位置的这个数,转化成二进制数。

也就是,

第1个位置,变成第0001个位置;

第2个位置,变成第0010个位置;

第3个位置,变成第0011个位置;

第4个位置,变成第0100个位置;

第5个位置,变成第0101个位置;

第6个位置,变成第0110个位置;

那么,规定来了,

凡是位置符合这种形式的,XXX1,归到P1;

凡是位置符合这种形式的,XX1X,归到P2;

凡是位置符合这种形式的,X1XX,归到P3;

凡是位置符合这种形式的,1XXX,归到P4;

那么显然各个校验码也被分到各个组里面去了,而且,每个组只有一个校验码。(这个,太简单我就不解释了……)

那么组分好了,校验码的值也就确定下来了。(数组内有多少个1就可以了)

好,为了防止你不明白,我举个例子哈。

我们想传这一组码:XX1X101X011

一共11位。

标X的是校验码的位置,我们暂时不知道它的值是多少。

位置在1,3,5,7,9,11的数据进到P1组。(你转换一下这些位置的二进制,就知道他们的位置符合XXX1)

位置在2,3,6,7,10,11的数据进到P2组。(位置符合XX1X)

位置在4,5,6,7的数据进到P3组。(位置符合X1XX)

位置在8,9,10,11的数据进到P4组。(位置符合1XXX)

那么确定了分组,校验码的值也就顺便确定下来了。

这样整个串的码就确定下来了。

现在知道汉明码是怎么分组的了吗?对,通过位置数的性质。

好,下两个问题。

从发送者的角度,我该怎么发用上汉明码的数据呢?

首先我们考虑我们到底要发多少位。假设校验码一共k位,我们想发的原始数据一共n位,要注意我们的校验码也要校验校验码错没错,所以,要校验的一共有k+n位,k位校验码可以检测2^k位的码,但是不能所以,校验码的位数要满足这个公式

,或者说

这样我们就能算出来要用多少校验码了。

其实哈,实际上不用这么麻烦,教科书总是那么复杂。假设你想发101011111,那你就先占下校验位,然后空着的位填你想发的数据就好。

占下1,2,4,8……等等位,看能占下多少位就可以,当然这个手算比较直观啦哈。

好,我假设你填完了,然后分好组,也确定了校验位的值了,那么发送出去啦~

嘟嘟嘟~~~~~~~

我是接收者,我收到了一串汉明码,怎样用汉明码的性质来检错呢?

1.分组,分好P1,P2,P3……

(2020年更正错误,各位看官不好意思了,下面的都是对的。)

2.分别对每个组校验,没有错的给它0,有错的给1.

3.记得第一个问题,汉明码的原理吗?你可能会想,3个组,我们可以画3个圈,可是100个组,这个圈可就太难画了啊!

这里有一个等价的方法,hamming真的太聪明了。

把P从大到小排列起来,得到一串1010,

for example:

组别:        P5   P4   P3   P2   P1

标志:         1      0      1     0     1

从大到小排列起来,标志排成了一串一零串。这个数就是出错的数据的位置。

本例中,10101位置上的位错了,换成十进制是第21个位置上的数错了。

然后,我们发现了它错误的位置,又因为它是二进制的,不是0就是1,所以,可以顺便把它纠错。

好了,这样,我就全都讲完了……………………

你可以随便写一串101010101010101010,从接收方的角度,解这一串汉明码,很好玩的。

加油哦~~~

说人话,人话,汉明码(海明码、hamming code)通俗易懂的解释,说人话。相关推荐

  1. 计算机系统基础知识——校验码之海明码(Hamming Code)

    前言:海明码在传输的消息流中插入验证码,当计算机插入或者移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误.由于汉明码简单,被广泛应用于内存. 1. 海明码   海明码是由贝尔实验室的Rich ...

  2. 洛谷P1461 海明码 Hamming Codes

    P1461 海明码 Hamming Codes 98通过 120提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 给出 N,B 和 ...

  3. USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n))

    题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位 ...

  4. 海明码!是人看的例子!说人话!

    一.特点 反正兄台都已经翻烂了,这里就简单描述:可检错,可纠错 二.奇偶校验概念 偶校验: 即获取的二进制字符串中,"1" 的个数为偶数(双数)时,取值为0,否则为1. 例如:r0 ...

  5. 我们应该时刻记住的一些话--关于职场,关于工作 【写给工作的人,特别是初入职场的人】

    1.学历代表你的过去,财力代表现在的努力,学习能力代表将来的成就.大多数人都想要改造这个世界,但却罕有人想改造自己.无论你在好单位还是一时不得志,都请你保持学习,这是你未来立足之本.--申晨 2.你很 ...

  6. 我们应该时刻记住的一些话--关于职场,关于工作 【写给工作的人,特别是初入职场的人】...

    1.学历代表你的过去,财力代表现在的努力,学习能力代表将来的成就.大多数人都想要改造这个世界,但却罕有人想改造自己.无论你在好单位还是一时不得志,都请你保持学习,这是你未来立足之本.--申晨 2.你很 ...

  7. 一些关于直播间人货场的打造干货,直播电商新手必须要了解人货场的概念

    一些关于直播间人货场的打造干货,直播电商新手必须要了解人货场的概念.人(主播)能说会道,有人设,对产品熟,懂销售,至少话术要能记住80%. 能说会道的主播才能控场带节奏,对产品熟的主播才能深刻理解商品 ...

  8. 深圳 IT 男打人后疯狂凡尔赛,还教育民警,这回把 IT 人的脸都丢尽了……

    点击关注公众号,Java干货及时送达 国庆了,国庆微信头像必须安排上,舒服- 生成方式: 超火的微信渐变国旗头像,一键生成!! 男子打人落水被救后求放过 "我也不知道我为什么会打人,我只是想 ...

  9. 重新启航 --- 失败的人只有一种,那就是在抵达终点之前放弃的人!

    大家好,我是码农伍,如果你很幸运看到我的博客,私信的时候可以称呼我为"小伍"哈.     今天,我在这个新专栏"心路小故事"中写第一篇博客,其实我的初衷很简单: ...

  10. P2P太假了,光有网站平台,连人都找不着了,更不用说网站大漏洞没人管,呵呵...

    P2P太假了,光有网站平台,连人都找不着了,更不用说网站大漏洞没人管,呵呵 今天看到乌云有公布了一个p2p网站的漏洞: http://www.wooyun.org/bugs/wooyun-2015-0 ...

最新文章

  1. mongo code 96
  2. 用命令行操作 VirtualBox 和 SGD
  3. 今天上班的乐趣是......
  4. 【算法漫画】什么是红黑树?
  5. java从入门到精通_Java入门到精通、学习路线、就业方向、薪资及前景分析(上篇)...
  6. android自定义渐变色,Android设置背景渐变色
  7. 离线语音识别软件_从音乐识别软件起家,这家公司如何备战车载AI语音市场GGAI对话...
  8. pycharm中将ui文件转换成py文件
  9. lucene的Query类型
  10. 数据结构之散列表实现
  11. (NO.00003)iOS游戏简单的机器人投射游戏成形记(二十一)
  12. 面向对象编程思想概览(三)继承
  13. 第三部分数据结构[专业课考试3]
  14. 《机器学习》周志华第一章课后习题
  15. java使用itextpdf生成 pdf (支持table)分页
  16. 恶意注册商标的情形有哪些?恶意抢注商标的认定标准是什么?
  17. Elasticsearch——Bboss
  18. C语言基础——C语言概述——语句和每行代码的含义
  19. 英伟达Tesla T4 显卡编解码能力测试
  20. 借助磁盘修理工具解决Boot Camp助理的分区问题

热门文章

  1. 工业机器人-基于伺服电机的PMSM控制系统硬件电路设计
  2. 策略验证_买入口诀_双管齐下买进不怕
  3. 超市选址问题(Python实现)
  4. c语言程序图片马赛克,震惊,被马赛克的图片竟然还可以恢复
  5. FreeCAD源码的编译与运行
  6. 一座宝塔_书是一座知识宝塔作文600字
  7. 如何使用python寻找K线中的黄昏之星
  8. 塞尔达传说——黄昏公主的几个障碍
  9. 一个北京24岁女孩的征男友要求!
  10. 查询宿舍信息的c语言,学生宿舍管理系统 C语言编程