用python写海明校验码
生成海明校验码
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.2校验码【***】:1.2.3海明校验码总结梳理
考点三:海明校验码[重点掌握] 可检错也可纠错 分组奇偶校验,通过分组交叉从而找出错误的位置 海明校验码位数的求取[掌握]:2(r次方)>=m + r + 1[公式也可以写成2(r次方) - 1 ...
- python crc-16 crc-16校验码 crc-16校验算法 ppp(MAC)帧检验序列FCS
python crc-16 crc-16校验码 crc-16校验算法 ppp(MAC)帧检验序列FCS 想弄明白这里要看多几遍,配合下面的例子能更快理解. 第一.CRC-16校验码计算方法: 常用查表 ...
- 超详细的海明校验码方法解读
海明校验码原理:在有效的信息为中加入几个校验位形成海明码,使码距[rjazgj1] 比较均匀地拉大,并把海明码的每个二进制位分配到几个奇偶校验组[rjazgj2] 中.当某一位出错后,就会引起有关的几 ...
- 海明校验码原理以及作用机制的介绍
什么是海明校验码? 由Richard Hamming于1950年提出.还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错.亦能检测出一位出错并能自动恢复该出错位的正确 ...
- 第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 [计算机组成原理笔记]
第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: 海明(Hamming) ...
- 海明校验码算法和纠错
背景介绍 由Richard Hamming于1950年提出.还被广泛采用的一种很有效的校验方法,是只要增加少数几个校验位,就能检测出二位同时出错.亦能检测出一位出错并能自动恢复该出错位的正确值的有效手 ...
- 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.- ...
- 海明码,码距,海明校验码
海明校验码是由RichardHamming于1950年提出.目前还被广泛采用的一种很有效的校验方法.它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较 ...
- 计算机底层:海明校验码。
计算机底层:海明校验码. 海明校验码是由奇偶校验码中的偶校验延申出来的: 计算机底层:奇偶校验码_srhqwe的博客-CSDN博客 了解海明校验码之前需要先了解奇偶校验码. 海明校验码 ...
最新文章
- MySQL语言的算法_MySQL知识整理
- win7完整卸载oracle11,win7安装与卸载oracle11g(32)
- java面试题37 关于对象成员占用内存的说法哪个正确?( )
- java socket调用接口_java调用websocket接口
- 服务器故障英文邮件,服务器一般故障排除(国外英文资料).doc
- NOIP 2007 普及组初赛试题(C++)(无答案)
- 题解 AT5258 【[ABC156A] Beginner】
- 2-1 git合并 打tag
- 无法删除oracle用户的问题
- 个利用正则表达式解析单句SQL的类SqlParser
- 程序员是做什么的?未来计算机变得智能,就不需要程序员了吗?
- 页面跳转的两种方式(转发和重定向)区别详解:
- 守护进程的单实例实现_非宁静无以致远_百度空间
- 阿里巴巴價值觀(企業文化),江湖传说——阿里巴巴土话102句完整版
- 山东科技大学计算机控制系统期末考试试卷,山东科技大学 计算机操作系统试题b...
- 大数据是什么意思?就业前景如何?
- 青云QingCloud推出CDN加速服务 动态选择最优节点
- 怎样用python中matplotlib模块直观的将股票数据展现出来
- 手把手教linux设备驱动,手把手教你写Linux设备驱动---定时器(一)(基于友善之臂4412开发板)...
- 批量文档处理软件推荐,同时处理 Word、Excel、PPT、PDF 等办公文件,支持批量格式转换、重命名和查找替换等