【发布时间】:2012-09-26 08:03:54
【问题描述】:
一道题:求下列代码的汉明距离:
11111
10101
01010
11100
00011
11001
答案是 2。这是如何工作的?我以为汉明距离只有两个字符串之间?
【问题讨论】:
-
你确定不是要求最小距离吗?
标签: math error-detection hamming-distance
一道题:求下列代码的汉明距离:
11111
10101
01010
11100
00011
11001
答案是 2。这是如何工作的?我以为汉明距离只有两个字符串之间?
【问题讨论】:
标签: math error-detection hamming-distance
代码的汉明距离定义为任意 2 个代码字之间的最小距离。因此,在您的情况下,找到列出的任何 2 个代码字之间的汉明距离,没有一个小于 2。
【讨论】:
这里有一些 Python 代码可以自动找到它:
code = [
(0,0,0,0,0,0),
(0,0,1,0,0,1),
(0,1,0,0,1,0),
(0,1,1,0,1,1),
(1,0,0,1,0,0),
(1,0,1,1,0,1),
(1,1,0,1,1,0),
(1,1,1,1,1,1)]
def hammingDistance(a, b):
distance = 0
for i in xrange(len(a)):
distance += a[i]^b[i]
return distance
def minHammingDistance(code):
minHammingDistance = len(code[0])
for a in code:
for b in code:
if a != b:
tmp = hammingDistance(a, b)
if tmp < minHammingDistance:
minHammingDistance = tmp
return minHammingDistance
print("min Hamming distance: %i" % minHammingDistance(code))
【讨论】:
我们有一个定理 d_min=weight(sum(all codes)); 权重是结果字符串中非零的数量。在您的示例模中添加所有字符串代码 就像所有的第一列和第二列......然后我们得到代码为 [ 0 0 1 1 0 ],它的权重是 2(非零的数量),即最小值汉明码距离
【讨论】:
0000、1000 和1110,则最小汉明距离显然是1,但您的计算将返回2(异或和为0110)