Skip to content

定义Definition

Hamming 距离

Hamming distance

等长字中不同坐标的数量;由逐位比较、三角不等式和 Hamming 球解释检错与唯一纠错半径。

形式陈述 ​

定义与三角不等式 ​

设 Σ 为字母表,x,y∈Σn 是两个等长的字。定义

dH(x,y)=|{i∈{1,…,n}:xi≠yi}|=∑i=1n1{xi≠yi}.

显然 0≤dH(x,y)≤n,且距离为零当且仅当两个字相同;交换 x,y 也不改变距离。三角不等式可以在每个坐标上证明:若 xi≠zi,那么 xi≠yi 与 yi≠zi 至少有一个成立。因此

1{xi≠zi}≤1{xi≠yi}+1{yi≠zi},

对 i 求和即得 dH(x,z)≤dH(x,y)+dH(y,z)。所以 (Σn,dH) 是一个度量空间。二元字母表下,它可以想成 n 维离散立方体:每走一条边翻转一位,两点间最短路长就是不同位数。

若坐标属于有限域,还可定义重量 wt(v) 为 v 的非零坐标数,于是

dH(x,y)=wt(x−y).

二元情形的减法就是按位异或,因此实现上可以先 XOR 再计数置位 bit;若把整段字装入机器字,还需明确长度与位宽,不能把整数减法的绝对值当成 Hamming 距离。[1]

直觉

比较的是位置,不是数值大小 ​

把两个同样长的字符串逐位对齐,数一数有多少个位置不同,得到的就是 Hamming 距离。例如:

位置 1 2 3 4 5
x 1 0 1 1 0
y 1 0 0 0 1
是否不同 0 0 1 1 1

因此 dH(x,y)=3。一个位置从 0 换成 1 算一次,从字符 A 换成 Z 也只算一次;符号之间没有预先规定的数值距离。

这个度量适合描述替换错误。插入一个字符会使后面的对齐关系整体移动;编辑距离的网格动态规划让插入、删除与替换共同决定对齐路径,因而可以比较不同长度的字,不能用原位置的不同字符数代替。

逐坐标计算 Hamming 距离
例子与边界

Hamming 球为什么是这个大小 ​

设 |Σ|=q,以 x 为中心、半径为整数 0≤t≤n 的球是

BH(x,t)={y:dH(x,y)≤t}.

恰好改动 i 位,要先用组合数从 n 个位置中选出 i 个,再为每个位置选一个不同于原符号的新符号。因此

|BH(x,t)|=∑i=0t(ni)(q−1)i.

二元长度 7、半径 1 的球包含原词和七种单比特翻转,共 8 个字。若一个码保证纠正一位错误,这些以码字为中心的球必须互不相交。把它们装进全部 qn 个字中,就得到Hamming 界所使用的计数关系。

为什么擦除比未知翻转容易处理 ​

擦除会标出出错位置。若两个码字在未擦除位置上都与接收词一致,它们只能在被擦除的 s 个位置上不同,因此距离至多 s。只要 s<dmin,就只能有一个候选;所以最小距离 dmin 可保证恢复至多 dmin−1 个擦除,比纠正未知翻转的半径更大。

例如重复码收到 1??,唯一可能的码字是 111;收到 100 则无法知道第一位错了还是后两位错了。若同时有 e 个未知替换和 s 个已知擦除,两个可能原词在未擦除位置至多相差 2e 位,在擦除位置至多相差 s 位,故 2e+s<dmin 是唯一恢复的保证条件。这个计数解释了错误位置提示的价值,而不是增加了码字之间的距离。

归一化距离与使用范围 ​

对 n>0,相对距离 dH(x,y)/n 衡量不同位置所占比例,便于比较不同规模的实例。在性质测试中,再取一个输入到所有合法对象的最小相对距离,便得到“需要改动多大比例才能修好”的概念。

距离描述的是输入之间的几何关系,不直接给出计算成本。两个完整数组的朴素比较要查看各坐标;压缩位串、抽样测试或分布式持有输入时,算法成本还取决于表示与计算模型。同样,最近邻距离并不自动等于信道中的最大似然代价:各位置错误概率不同或提供软可靠度时,译码往往需要加权信息。

推论与应用

距离怎样变成纠错能力 ​

设码 C⊆Σn 至少有两个码字,其最小距离为

dmin=minc≠c′, c,c′∈CdH(c,c′).

若发送 c 后至多有 dmin−1 个位置被改动,接收词不可能变成另一个码字。否则两个码字的距离就小于 dmin。因此,检查接收词是否仍为码字,能够保证检测这一区间内的非零错误。

纠错需要更大的间隔。假设接收词 r 同时距两个不同码字至多 t,则

dH(c,c′)≤dH(c,r)+dH(r,c′)≤2t.

只要 2t<dmin,这种混淆便不可能发生。因此最近邻译码能够保证纠正

t=⌊dmin−12⌋

个任意替换错误。这是对所有码字、所有相应错误位置的保证,不是平均成功率,也不是说超过这个数就必定失败。[1][2]

二元重复码 C={000,111} 的最小距离为 3。发送 000,若第一位翻转得到 100,它距 000 为 1、距 111 为 2,最近邻能恢复原词。若前两位翻转得到 110,它反而距 111 更近,会被误纠到另一个码字。这个例子也说明:“发现了错误”与“知道原来是什么”需要不同强度的冗余。

对至少含两个码字的线性码,任意两码字之差仍是码字,故

dmin=minc∈C∖{0}wt(c).

于是两两比较码字的问题,化成了寻找最轻的非零码字。综合译码正是在这一线性结构中定位错误。

多处错误也可能只含一个独立方向 ​

若每个符号来自扩域 L/Fq,秩度量可以改按错误值张成的底域维数收费。四个相同非零错误值有Hamming重量四,却只有秩一;两个底域独立的错误值则有秩二。固定底域后总有 wtR≤wtH,但相同半径对应不同错误集合,必须重新核对码距及译码合同。

Gabidulin码提供这种距离下的最优构造。它允许在一个秩方向传播到许多位置的情况下恢复消息,不表示任意四个无关替换也同样可纠。

参考资料

[1] F. J. MacWilliams、N. J. A. Sloane,The Theory of Error-Correcting Codes,1977,第 1 章,码的距离、重量与纠错球。

[2] MIT 6.02,Linear Block Codes: Encoding and Syndrome Decoding,线性码、最小距离及 Hamming 码实例。

关系图谱20 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系