海明码检错与纠错,经典例子讲解~

平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从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,数据位从高往低占据海明码空余编码位。最后形成的海明码如下所示:

海明码位121110987654321
数据位D7D6D5D4D3D2D1D0
校验位P3P2P1P0

      校验码校验的数据位对应海明码位置方法:第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

    (1) 商务合作微信号:M9392W

    (2) 购物商城: 扫码即可进入博主开发的小程序购物商城,享超大优惠购物,支持一下博主吧~

    (3) 博主微信公众号IT特靠谱,学习更多开发实战技巧!

内容概要:文章介绍了DeepSeek在国内智能问数(smart querying over data)领域的实战应用。DeepSeek是一款国内研发的开源大语言模型(LLM),具备强大的中文理解、推理和生成能力,尤其适用于企业中文环境下的智能问答、知识检索等。它具有数据可控性强的特点,可以自部署、私有化,支持结合企业内部数据打造定制化智能问数系统。智能问数是指用户通过自然语言提问,系统基于结构化或非结构化数据自动生成精准答案。DeepSeek在此过程中负责问题理解、查询生成、多轮对话和答案解释等核心环节。文章还详细展示了从问题理解、查询生成到答案生成的具体步骤,并介绍了关键技术如RAG、Schema-aware prompt等的应用。最后,文章通过多个行业案例说明了DeepSeek的实际应用效果,显著降低了数据使用的门槛。 适合人群:从事数据分析、企业信息化建设的相关从业人员,尤其是对智能化数据处理感兴趣的业务和技术人员。 使用场景及目标:①帮助业务人员通过自然语言直接获取数据洞察;②降低传统BI工具的操作难度,提高数据分析效率;③为技术团队提供智能问数系统的架构设计和技术实现参考。 阅读建议:此资源不仅涵盖了DeepSeek的技术细节,还提供了丰富的实战案例,建议读者结合自身业务场景,重点关注DeepSeek在不同行业的应用方式及其带来的价值。对于希望深入了解技术实现的读者,可以进一步探索Prompt工程、RAG接入等方面的内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT_Most

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

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

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

打赏作者

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

抵扣说明:

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

余额充值