海明距离

海明距离

Content #

还可以换一个角度来理解海明码的作用。对于两个二进制表示的数据,他们之间有差异的位数,称之为海明距离。比如 1001 和 0001 的海明距离是 1,因为他们只有最左侧的第一位是不同的。而 1001 和 0000 的海明距离是 2,因为他们最左侧和最右侧有两位是不同的。

于是,你很容易可以想到,所谓的进行一位纠错,也就是所有和要传输的数据的海明距离为 1 的数,都能被纠正回来。

而任何两个实际想要传输的数据,海明距离都至少是 3。为什么不能是 2 呢?因为如果是 2 的话,那么就会有一个出错的数,到两个正确的数据的海明距离都是 1。当看到这个出错的数的时候,就不知道究竟应该纠正到那一个数了。

在引入了海明距离之后,就可以更形象地理解纠错码了。在没有纠错功能的情况下,看到的数据就好像是空间里面的一个一个点。这个时候,可以让数据之间的距离很紧凑,但是如果这些点的坐标稍稍有错,就可能搞错是哪一个点。

在有了 1 位纠错功能之后,就好像把一个点变成了以这个点为中心,半径为 1 的球。只要坐标在这个球的范围之内,都知道实际要的数据就是球心的坐标。而各个数据球不能距离太近,不同的数据球之间要有 3 个单位的距离。

Viewpoints #

From #

50 | 数据完整性(下):如何还原犯罪现场?