Hamming Codes
1. 海明校验码检错采用的是分组交叉奇偶校验法。
将编码中的数据位分成r个校验组,组内采取奇偶校验,每组一个校验位,可构成r位检错码。r>1
全部检错码为0表示数据正常,不为零时检错码的值表示编码中出错数据位。
2. 编码方式:每一数据位至少参加2个校验组,一位出错,可引起多个检错码的变化。
•设海明码 N 位,其中数据位 k 位,校验位 r 位
•校验位 r 位表示共 r 个校验组
•N=k+r≤2r-1
例如我们课上讲的(4,3)编码:4个数据位,3个校验位。其编码如下
H7 H6 H5 H4 H3 H2 H1
D4 D3 D2 P3 D1 P2 P1
包含G3 G2 G1个校验组,P3 P2 P1分属其中一组:
其中 P1=D1⊕D2⊕D4 P2=D1⊕D3⊕D4 P3=D2⊕D3⊕D4
G1=P1⊕D1⊕D2⊕D4 G2=P2⊕D1⊕D3⊕D4 G3=P3⊕D2⊕D3⊕D4
对应的位数: G1(P1,H3,H5,H7) G2(P2,H3,H6,H7) G3(P3,H5,H6,H7)
然后根据G3G2G1就可以判断出错位。(只能检验纠正一位出错位)

不过貌似老师也没讲具体标志位的位置是怎么确定的,下面是我找到的一些资料:
3. 码字(Code Word) 按如下方法构建:
(1)、把所有2的幂次方的数据位标记为奇偶校验位(编号为1, 2, 4, 8, 16, 32, 64等的位置)
–(4,3)编码中的P1,P2,P3存放的位置H1,H2,H4
(2)、其他数据位用于待编码数据. (编号为3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17等的位置)
–(4,3)编码中的D1-D4
(3)、每个奇偶校验位的值代表了代码字中部分数据位的奇偶性,其所在位置决定了要校验和跳过的比特位顺序。
位置1:校验1位,跳过1位,校验1位,跳过1位(1,3,5,7,9,11,13,15,…)
位置2:校验2位,跳过2位,校验2位,跳过2位 (2,3,6,7,10,11,14,15,…)
位置4:校验4位,跳过4位,校验4位,跳过4位 (4,5,6,7,12,13,14,15,20,21,22,23,…)
位置8:校验8位,跳过8位,校验8位,跳过8位(8-15,24-31,40-47,…)
–(4,3)编码中P1=D1⊕D2⊕D4(H1,H3,H5,H7) P2=D1⊕D3⊕D4 P3=D2⊕D3⊕D4
4. 采用偶校验,如果全部校验的位置中有奇数个1,把该奇偶校验位置为1;
如果全部校验的位置中有偶数个1,把该奇偶校验位置为0.
5. 小例子:待传送数据(一个字节):10011010
构造海明码, 对应的校验位留空 _ _ 1 _ 0 0 1 _ 1 0 1 0
然后计算每个校验位的奇偶性 :
P1检验1,3,5,7,9,11位,发现有偶数个1(自己数数看),所以P1=0;
P2检验2,3,6,7,10,11位,发现有奇数个1,所以P2 =1;
P3检验4,5,6,7,12位,发现有奇数个1,所以P3 =1;
P4检验8,9,10,11,12位,发现有偶数个1,所以P4 =0;
因此最后的编码为: 011100101010.
假定实际接收到的数据 011100101110. 则第10 位出错。
---------------------------------------------------------------------------------
Hamming Codes的更多相关文章
- 洛谷P1461 海明码 Hamming Codes
P1461 海明码 Hamming Codes 98通过 120提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 给出 N,B 和 ...
- USACO 2.1 Hamming Codes
Hamming CodesRob Kolstad Given N, B, and D: Find a set of N codewords (1 <= N <= 64), each of ...
- 洛谷 P1461 海明码 Hamming Codes
P1461 海明码 Hamming Codes 题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B &l ...
- 【USACO 2.1】Hamming Codes
/* TASK: hamming LANG: C++ URL:http://train.usaco.org/usacoprob2?a=5FomsUyB0cP&S=hamming SOLVE: ...
- USACO Section 2.1: Hamming Codes
挺简单的一道题 /* ID: yingzho1 LANG: C++ TASK: hamming */ #include <iostream> #include <fstream> ...
- USACO Hamming Codes DFS 构造
我还是用了很朴素的暴力匹配A了这题,不得不感叹USACO时间放的好宽... /* ID: wushuai2 PROG: hamming LANG: C++ */ //#pragma comment(l ...
- P1461 海明码 Hamming Codes
题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位 ...
- USACO Section2.1 Hamming Codes 解题报告 【icedream61】
hamming解题报告----------------------------------------------------------------------------------------- ...
- USACO Hamming Codes
题目大意:求n个两两hamming距离大于等于d的序列,每个元素是一个b bit的数 思路:仍然暴力大法好 /*{ ID:a4298442 PROB:hamming LANG:C++ } */ #in ...
- USACO2.1 Hamming Codes【枚举+二进制处理+输出格式+题意理解】
这道题加了2个看起来奇奇怪怪的$tag$ 1.输出格式:不得不说这个格式输出很恶心,很像$UVA$的风格,细节稍微处理不好就会出错. 因为这个还$WA$了一次: ,m=n; ) { ;i<=t+ ...
随机推荐
- Python Twisted介绍
原文链接:http://www.aosabook.org/en/twisted.html 作者:Jessica McKellar Twisted是用Python实现的基于事件驱动的网络引擎框架.Twi ...
- PHP IMAP收QQ邮件,SMTP存入另外QQ邮箱
作用,将qq1收到邮件,用qq2的账号.以qq0的为发件人身份放到qq2的邮箱. 什么样做这样一个功能,一个朋友要求的,她不告诉我为什么,好吧 <?php define('USER','xxx@ ...
- Prime Palindromes
题目大意:求出区间[a,b]之间的回文质数. a<=b<=10^8; 解题过程: 1.先打个素数表,新学了个 欧拉筛法,是对普通筛法的改进.普通筛法是每找到一个素数,就把它的所有倍数标记成 ...
- C#解析复杂的Json成Dictionary<key,value>并保存到数据库(多方法解析Json 四)
准备工作: 1.添加引用System.Web.Extensions, 2..net3.5+版本都有,如果VS2010找不到,在这个文件夹找:C:\Program Files\Reference Ass ...
- 各种注释--------html,jsp
1. <!--到梦之都XHTML教程的链接--> <a href="http://www.dreamdu.com/xhtml/"> 学习XHTML < ...
- ctime、atime
Linux系统文件有三个主要的时间属性,分别是ctime(change time, 而不是create time), atime(access time), mtime(modify time).后来 ...
- 推荐一款免安装的在线Visio流程工具ProcessOn
昨天收到一人的邮件,说某个软件叫ProcessOn是web版的visio,出于对技术知识的渴望以及自己的好奇所以对ProcessOn进行了一番体验.结果有点被这个软件给吸引上了,无论是在用户体验上,还 ...
- 隐藏与显示:display/visibility/visible区别
说到标签的隐藏,你们会用到什么呢?display?visibility?还是服务器控件的visible? 显然,这三者都能起到隐藏与显示的效果,但是用途确完全不一样,请看用法与区别: <div ...
- java基础-003
10.进程和线程 进程是执行者的应用程序,而线程是进程内部的一个执行序列.一个进程可以有多个线程.线程又叫轻量级进程. 创建线程的三种方式: I> 继承Thread类 II> 实现Runn ...
- 实例化(用new的方式)创建一个对象的顺序
父类静态块--->子类静态块----->父类普通代码块----->父类构造方法------->子类普通代码块----->子类构造方法 如果父类构造方法中调用的非priva ...