汉明距离与Levenshtein距离

时间:2011-01-03 21:29:15

标签: algorithm diff nlp levenshtein-distance hamming-distance

对于我正在研究的问题,找到两个序列之间的距离来确定它们的相似性,序列顺序非常重要。但是,我所拥有的序列长度并不完全相同,所以我用空点填充任何不足的字符串,使得两个序列的长度相同,以满足汉明距离要求。我这样做是否有任何重大问题,因为我所关心的只是换位次数(不是像Levenshtein那样的插入或删除)?

我发现汉明距离比Levenshtein快得多,作为长度较长的序列的距离度量。何时应该使用Levenshtein距离(或Levenshtein距离的导数)而不是更便宜的汉明距离?汉明距离可以被认为是两个序列之间可能的Levenshtein距离的上限,因此如果我将两个序列进行比较以获得有序偏差的相似性度量而不是绝对最小的移动数量以匹配序列,则没有明显的我之所以选择Levenshtein而不是Hamming作为指标,是吗?

2 个答案:

答案 0 :(得分:37)

这个问题实际上取决于你匹配的序列类型,以及你想要的结果。

如果“1234567890”和“0123456789”被认为完全不同并不是问题,那么汉明距离确实很好。

答案 1 :(得分:0)

除了正确的Johan答案外,填充也可能有问题。

例如,当您比较123123456时,是在字符串的末尾还是在字符串的开头填充。 ___123123456的相似度为0,但123___123456的相似度为3。