直观理解海明码校验关系(一表秒懂)
考研复习计算机网络的时候看到书上给的海明码计算流程一脸懵逼,看王道的课也是似懂非懂,后来忘了是看到哪位大佬的博客了突然悟到其中精巧,等我找到之后在这里放个链接。
and这只是个人理解啦如有不对麻烦评论区指出!求轻喷!
废话不多说直接放图(from自用学习笔记)
确定总位数以及校验码“座次表”的确定就不赘述啦,下面直接谈谈我一开始一脸懵的校验关系确定:
- 生成的海明码一栏展示的是数据位+校验位后的完全体(以下统称完全体)。Xi为校验位,i是它们各自在完全体中的位序号(这样便于与校验位分布相对应);dataj是数据位,j是它们在原数据中的位序号。
- 表的第2-4行想表达的是与i号校验位形成校验关系的bit在完全体中的位置,即:
- 1号管理层中,深绿色块的位置 所对应的 完全体中对应位置的bit 是 与 1号校验位X1 形成校验关系的;
- 2号管理层中,浅绿色块的位置 所对应的 完全体中对应位置的bit 是 与 2号校验位X2 形成校验关系的;
- 4号管理层中,浅黄色块的位置 所对应的 完全体中对应位置的bit 是 与 4号校验位X4 形成校验关系的;
- 8号管理层中,浅蓝色块的位置 所对应的 完全体中对应位置的bit 是 与 8号校验位X8 形成校验关系的;
是不是一目了然了呢?感觉我也不用再进一步解释啥了hhh
为了更方便记忆,用一句经典小品台词来概括就是 “走两步,没病走两步!”
海明码里的校验码不喜欢一直连续地走格子,而是喜欢从自己的当前位置开始(当前位置为第1格)连续走i格,跳过i格后,再!连续走i格,然后再跳i格后,再!连续走i格…直到走到终点。
(或许可以和小时候玩的跳房子结合一下?
然后校验位的计算我看到两个说法,
一个是说被该校验位管理的所有data位(只是data位!校验位不一起玩!)求异或,从而得出该校验位的值(王道书的说法);
一个是说该校验位+它负责的data位组成的小组按照偶校验的方式“组内沟通”,确定该校验位的值,
后来才发现这俩其实是同一个意思…
anyway希望我表达清楚了…有什么疑问或者不对的地方评论区见啦!