本文已参与「新人创作礼」活动,一起开启掘金创作之路。
汉明码
1940年,汉明于贝尔实验室(Bell Labs)工作,运用贝尔模型V(Bell Model V)电脑,一个周期时间在几秒钟内的机电继电器机器。输入端是依靠打孔卡(Punched Card),这不免有些读取错误。在平日,特殊代码将发现错误并闪灯(flash lights),使得操作者能够纠正这个错误。在周末和下班期间,在没有操作者的情况下,机器只会简单地转移到下一个工作。汉明在周末工作,他对于不可靠的读卡机发生错误后,总是必须重新开始项目变得愈来愈沮丧。在接下来的几年中,他为了解决调试的问题,开发了功能日益强大的调试算法。在1950年,他发表了今日所称的汉明码。现在汉明码有着广泛的应用 百度词条
定义
设r是一个正整数,设H是一个r x (2^r^- 1)阶矩阵,其列向量由V(r,2)中所有不同的非零向量组成。以H为校验矩阵的线性码称为二元Hamming码,记为Ham(r,2)。
Ham(r,2)的码长n是2^r^-1,码的维数k为2^r^- 1- r。
例如:
性质
二元Hamming码Ham(r,2)是一个完备的2元【n,n-r,3】线性码,其中n=2^R^-1
- 最小距离d=3
- 完备码
- 汉明码能纠正1个错误的码
译码
Ham(r,q)的陪集个数是q^r^,并且Ham(r,q)是恰好可纠正一个错误的纠错码,陪集头的个数是q^r^-1个
q元汉明码Ham(r,q)的译码过程如下:
- 计算S(x) = x H^T^
- 计算S(x) = 0 ,则认为是正确的码字
- 如果S(x) = b ^T^,则把x的第i个位置减b
例题1:
例题2: