生成海明校验码

def Input():"""输入字符串'0'与'1'的组合输出两个参数:字符串的长度,字符列表"""string = input("请输入‘0’‘1’字符串:")return len(string), list(string)# n表示字符串长度,List表示字符列表。List --> type(List[0])=string
n, List = Input()def getK(n):"""param: n表示字符串长度function:计算得到k的值,k为海明码检验位return:返回参数k"""k = 1while n+k > pow(2, k)-1:k += 1return k# k为海明码检验位
k = getK(n) def getHList(n, k, List):"""param:n表示字符串长度,k表示海明码校验位,List表示'0' '1'字符列表function:初始化列表H,将List里的字符按照规律插入H列表中,未插入的位置则是校验码的位置,初始值为-1return:返回已经初始化列表H。H --> type(H[0])=int"""H = [-1 for i in range(k+n+1)]cnt = 0for i in range(1, k+n+1):if i == pow(2, cnt):cnt += 1continueH[i] = int(List.pop())return H# 初始化列表H。H --> type(H[0])=int
H = getHList(n, k, List.copy())def getPDict(k, H):"""param: k表示海明码校验位,H表示初始化列表function: 计算校验码的值return: 返回字典P,键确定索引位置,值是计算出来的校验码"""P = dict()for i in range(k):P[i] = Nonecnt = 0for bi in range(1, len(H)):if bi == pow(2, cnt):cnt += 1continueif (bi >> i)&1:if not P[i]:P[i] = H[bi]else:P[i] = P[i]^H[bi]return P   # 字典P,在pow(2, key)的H索引位置上插入value
P = getPDict(k, H) def insertPInH(P, H):"""param: 字典P,存储了校验码的值。初始化列表H,待插入P的值。function:按照一定规律将P中的值插入H中return: 返回列表H"""for key in P:Index = pow(2, key)H[Index] = P[key]return H  # H1 表示已经处理好的海明校验码
H1 = insertPInH(P, H.copy())

输入字符串:1001101

生成海明码

海明码的校验

在传输过程中,数据可能会有一位出差错。那么我们就需要检错并纠错。
假设传输后我们得到的数据为:

[-1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1]

然后将这个数据进行checking,检查是否出错。

def checking(Hs, k):"""param: Hs表示传输过来的字符串,用于验证。k表示校验位数。function: 用来校验传输的字符串是否出错"""# Pc得到Pi校验码Pc = getPDict(k, Hs)print(Pc)Si = []Svalue = 0cnt = 0for i in range(1, len(Hs)):if i == pow(2, cnt):Pi = Pc[cnt]value = Pi^Hs[i]Si.append(value)if value == 0 and cnt == 0:Svalue = 0else:Svalue += pow(2*value, cnt)cnt += 1if cnt == k:breakprint(Si)if Svalue:print("传输错误,错误的索引位置为:", Svalue)print("从下标0开始索引")   else:print("传输无误!")checking([-1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1], k)

用python写海明校验码相关推荐

  1. 【中级软考—软件设计师】1计算机组成与体系结构1.2校验码【***】:1.2.3海明校验码总结梳理

    考点三:海明校验码[重点掌握] 可检错也可纠错 分组奇偶校验,通过分组交叉从而找出错误的位置 海明校验码位数的求取[掌握]:2(r次方)>=m + r + 1[公式也可以写成2(r次方) - 1 ...

  2. python crc-16 crc-16校验码 crc-16校验算法 ppp(MAC)帧检验序列FCS

    python crc-16 crc-16校验码 crc-16校验算法 ppp(MAC)帧检验序列FCS 想弄明白这里要看多几遍,配合下面的例子能更快理解. 第一.CRC-16校验码计算方法: 常用查表 ...

  3. 超详细的海明校验码方法解读

    海明校验码原理:在有效的信息为中加入几个校验位形成海明码,使码距[rjazgj1] 比较均匀地拉大,并把海明码的每个二进制位分配到几个奇偶校验组[rjazgj2] 中.当某一位出错后,就会引起有关的几 ...

  4. 海明校验码原理以及作用机制的介绍

    什么是海明校验码? 由Richard Hamming于1950年提出.还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错.亦能检测出一位出错并能自动恢复该出错位的正确 ...

  5. 第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 [计算机组成原理笔记]

    第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: 海明(Hamming) ...

  6. 海明校验码算法和纠错

    背景介绍 由Richard Hamming于1950年提出.还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错.亦能检测出一位出错并能自动恢复该出错位的正确值的有效手 ...

  7. c语言海明校验码编码,海明校验码的编码规则有哪些?

    在海明码中, 位号数(1.2.3.--.n)为2的权值的那些位,即: 1(2^0).2(2^1).4(2^2).8(2^3).-2^(r-1)位,作为奇偶校验位,并记作: P1.P2.P3 .P4.- ...

  8. 海明码,码距,海明校验码

    海明校验码是由RichardHamming于1950年提出.目前还被广泛采用的一种很有效的校验方法.它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较 ...

  9. 计算机底层:海明校验码。

    计算机底层:海明校验码.         海明校验码是由奇偶校验码中的偶校验延申出来的: 计算机底层:奇偶校验码_srhqwe的博客-CSDN博客 了解海明校验码之前需要先了解奇偶校验码. 海明校验码 ...

最新文章

  1. MySQL语言的算法_MySQL知识整理
  2. win7完整卸载oracle11,win7安装与卸载oracle11g(32)
  3. java面试题37 关于对象成员占用内存的说法哪个正确?( )
  4. java socket调用接口_java调用websocket接口
  5. 服务器故障英文邮件,服务器一般故障排除(国外英文资料).doc
  6. NOIP 2007 普及组初赛试题(C++)(无答案)
  7. 题解 AT5258 【[ABC156A] Beginner】
  8. 2-1 git合并 打tag
  9. 无法删除oracle用户的问题
  10. 个利用正则表达式解析单句SQL的类SqlParser
  11. 程序员是做什么的?未来计算机变得智能,就不需要程序员了吗?
  12. 页面跳转的两种方式(转发和重定向)区别详解:
  13. 守护进程的单实例实现_非宁静无以致远_百度空间
  14. 阿里巴巴價值觀(企業文化),江湖传说——阿里巴巴土话102句完整版
  15. 山东科技大学计算机控制系统期末考试试卷,山东科技大学 计算机操作系统试题b...
  16. 大数据是什么意思?就业前景如何?
  17. 青云QingCloud推出CDN加速服务 动态选择最优节点
  18. 怎样用python中matplotlib模块直观的将股票数据展现出来
  19. 手把手教linux设备驱动,手把手教你写Linux设备驱动---定时器(一)(基于友善之臂4412开发板)...
  20. 批量文档处理软件推荐,同时处理 Word、Excel、PPT、PDF 等办公文件,支持批量格式转换、重命名和查找替换等

热门文章

  1. 南怀瑾:“心静出贵人”,中年后这三个地方静,一切都会越来越顺!
  2. 常用H5标签-第二部分
  3. OA项目中遇到的问题
  4. 入职培训ppt计算机二级,计算机二级office试题PPT.doc
  5. composer的原理和正确使用(最新)
  6. Mac看源码时,idea插件RESTfultook居然可以这样用?
  7. wargame v2.1 Web Wrtteup By Assassin
  8. jQueryXML笔记
  9. 如何才能成为一个程序员
  10. J2EE基础教程(4):struts框架(视频笔记)