ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于海明码本质的另一种的理解方式

2021-09-08 21:58:55  阅读:297  来源: 互联网

标签:log 22i 二进制 明码 距离 理解 本质 中心点


关于海明码本质的另一种的理解方式


前言

距离学习计算机组成已经过去了许久,忘却的救主快要降临了罢 ,在复习的过程中读到了海明码,当时学习海明码的时候就一知半解,再次复习虽然能够做题求解,但终不能理解其原理:为什么能够纠错,为什么能够检错,思索半日一无所获,在恍惚之中想到了一种理解的方法,遂记录之,海明码的具体就不赘述了。

一、字符串的距离和二进制串的距离

本文中只讨论长度相同的字符串的距离。长度相同的字符串的距离指修改最少次字符试两个字符串相等,例如“ABC“和”ABD“距离为1,”ABCD“和”ABBB“距离为2。同理当字符只有‘0’和‘1’时,可以定义二进制串的距离,如
1000和1001的距离为1,1111和0000的距离为4,此处的距离并不是数值的差

二、海明码只是一串数据加工后的数据

海明码中包含原始的数据,但是我们总是忽略了海明码本身也是一种数据,而海明码和源码具有多对一的映射关系。

二、分析

二进制串的距离与无向图

简要分析一拨二进制串的距离,设长度为K的二进制串,容知与其距离为1的二进制串有K个,例如000有三个距离为一的串:100、010,001。两个二进制串最大的距离为K,例如与0000最大距离的是1111.

既然有了距离,就不得不想到图,可以想象,一个二进制串都是一个点,距离为1的串直接相连:比如3位二进制串对应的图的图:
在这里插入图片描述
(没有cad使用window画图绘制,虽然图只有拓扑结构不规定确定样式,但是我仍然将其绘制成立方体的样子)
这时我们可以说一位跳变就是从这个图上的一点移动到临近的另一个点,比如:
001---->101;
对于普通的奇或者偶校验,拥有一位检错能力,如果我们也要在这个图或者立方中实现,那么和有效点距离为1的点都是无效点,这样的点可以随便找到4个:001,010,100,111,可以用这四个点代表有效值,任意一个位错误都能检查出错误,(这就是最后一位是奇数效验的编码),分别映射1,2,3,4,当然如果愿意,它可以映射到任意四个不同值

这时候我们思考具有一位纠错能力的编码,假设一个无错的二进制串称之为中心点,一位错误的点就是中心点距离为1的点,叫有效点,那么有效点和中心点代表相同的数据,那么可以推测,中心点总是被有效点包围,两个中心点距离起码为3。在这个立方体中找到距离为2的两个点,可以知道这就是最远的两个端点,譬如{000,111},{001,110}等,我们知道{001}和{111},就是三位无总效验码的海明码,当有一位错误时仍然能知道正确的值。

读到这里,相信你已经大致理解了这种思想,具有纠错能力的编码,完全正确的编码像一个灯塔,,当移动不太远的地方(移动一位),仍然能走回去正确的灯塔,如果走太远(即有两三个位错误)走到其他灯塔的光下,这时候不能发现错误,对于有检错能力的编码,错误码如同没有光的黑色地带,不可能找回正确的灯塔(原本的值),但能知道发生了错误。

如果二进制串的长度为K,我希望编一个码让它能够一位纠错,那么每一个中心点的的周围有K个有效点,K+1个点代表一个值,一共有2^ K个点,那么它至多能储存n= 2^K/(1+k)个数据,当K=3,n=2;K=7,n=2 ^5,这正是3位和7位海明码能储存的数据大小,对于K!= 2 ^i-1(i=1,2,3,4)的值,可以推测有点的浪费。存在无效点,无效点数 = 所有点数 -中心点数 - 有效点数。
虽然数学不行推不出中心点有多少个,但是可以通过海明码反推,海明码数据位有
K − ⌊ log ⁡ 2 K ⌋ − 1 K -\left \lfloor \log_{2}{K} \right \rfloor -1 K−⌊log2​K⌋−1
那么中心点有
2 K − ⌊ log ⁡ 2 K ⌋ − 1 2^{ K -\left \lfloor \log_{2}{K} \right \rfloor -1 } 2K−⌊log2​K⌋−1
有效点有
K ∗ 2 K − ⌊ log ⁡ 2 K ⌋ − 1 K*2^{ K -\left \lfloor \log_{2}{K} \right \rfloor -1 } K∗2K−⌊log2​K⌋−1
无效点有
2 K − 2 K − ⌊ log ⁡ 2 K ⌋ − 1 − K ∗ 2 K − ⌊ log ⁡ 2 K ⌋ − 1 2^{K}-2^{ K -\left \lfloor \log_{2}{K} \right \rfloor -1 }-K*2^{ K -\left \lfloor \log_{2}{K} \right \rfloor -1 } 2K−2K−⌊log2​K⌋−1−K∗2K−⌊log2​K⌋−1
当K=2^i-1(i=1,2,3,…)时无效点:
2 2 i − 1 − 2 2 i − 1 − ⌊ log ⁡ 2 2 i − 1 ⌋ − 1 − ( 2 i − 1 ) ∗ 2 2 i − 1 − ⌊ log ⁡ 2 2 i − 1 ⌋ − 1 2^{2^{i} -1}-2^{ 2^{i} -1 -\left \lfloor \log_{2}{2^{i} -1} \right \rfloor -1 }-(2^{i} -1)*2^{ 2^{i} -1 -\left \lfloor \log_{2}{2^{i} -1} \right \rfloor -1 } 22i−1−22i−1−⌊log2​2i−1⌋−1−(2i−1)∗22i−1−⌊log2​2i−1⌋−1
2 2 i − 1 − 2 2 i − i − 1 − ( 2 i − 1 ) ∗ 2 2 i − i − 1 2^{2^{i} -1}-2^{ 2^{i} -i -1 }-(2^{i} -1)*2^{ 2^{i} - i-1 } 22i−1−22i−i−1−(2i−1)∗22i−i−1
2 2 i − 1 − 2 2 i − i − 1 − ( 2 i ∗ 2 2 i − i − 1 + ∗ 2 2 i − i − 1 ) 2^{2^{i} -1}-2^{ 2^{i} -i -1 }-(2^{i}* 2^{ 2^{i} - i-1 }+*2^{ 2^{i} - i-1 }) 22i−1−22i−i−1−(2i∗22i−i−1+∗22i−i−1)
0 0 0
所以当当K=2^i-1(i=1,2,3,…)时效率最高没有无效点,虽然是由海明码反推而出,但是可以相信如果有大佬能从图算出中心点的个数也应该是一样的。

这样看来其他的纠错检错编码也大同小异,如果想要两位纠错,就要找到两两距离为5的点。因为K至少为5才能有两个点,我们可以将00000代表0,将11111代表1,那么这个编码两位错误仍然能纠错,当然这样子的点还有很多,比如11110,00001,映射到什么值不重要,只要有多个状态就能储存数据。

三,二进制串图的后继

二进制串的长度位K,K=1时二进制串的图(不标明值了)在这里插入图片描述
K=2
在这里插入图片描述
K=3在这里插入图片描述
K=4.在这里插入图片描述
可以看出,对于K+1位的图就是K位的图复制并使复制的点相连,因为二进制串x1,x2,x3…1和x1,x2,x3…0(xi=0或1,i=1,2,3…)的距离总是1。对于K=4,我们不能找出三个两两距离大于或等于3的点,所以4位的海明码仍然只能存储1位的数据,

如果把K视作维度,也许能模拟出漂亮的模型,或者将所有点平铺在一个球面上,可以想象,由于每个点都有K个的临近点,这些点的分布是均匀且对称的,想要1位纠错,就在这个球上的点找出个两两距离大于等于3的中心点,想要1位纠错,二位检错,就在这个球上的点找出个两两距离大于等于4的点,与每个中心点距离为2的点是无效点,如果能用CG动画制作出找点、检错、纠错的过程,并将中心点、有效点、无效点做成不同的颜色,便能够更为直观的理解海明码的深层原理,希望有兴趣有能力的大佬能够制作出来。
(水平有限,错误请指出)。

标签:log,22i,二进制,明码,距离,理解,本质,中心点
来源: https://blog.csdn.net/qq_45452773/article/details/120185797

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有