1

我需要实现一个字符串匹配算法来确定哪些字符串最匹配。当可以获得这个固定长度时,我看到汉明距离是一个很好的匹配算法。

如果我改用 Levenshtein 距离公式,匹配质量有什么优势吗?我知道这种方法效率较低,因为它考虑了可变长度的字符串,但我在这里真正关心的是匹配的质量。另外,有没有更好的算法我可以考虑?如果这有什么不同,我会在 Java 中工作。

http://en.wikipedia.org/wiki/Levenshtein_distance

http://en.wikipedia.org/wiki/Hamming_distance

非常感谢

4

2 回答 2

3

考虑字符串:“abcdefg”和“bcdefgh”。

Levenshtein 距离是 2。Hamming 距离(作用于字符而不是位)是 7。

因此,这实际上取决于您是否要将这些字符串视为相似。汉明距离有其适当的用途,但“这些弦看起来会像人类吗?” 不是其中之一。

于 2009-12-07T16:23:08.130 回答
1

您可能会发现Bitap 算法很有趣。

bitap 算法(也称为 shift-or、shift-and 或 Baeza-Yates-Gonnet 算法)是一种模糊字符串搜索算法。该算法判断给定文本是否包含与给定模式“近似相等”的子字符串,其中近似相等是根据 Levenshtein 距离定义的——如果子字符串和模式彼此在给定距离 k 内,则算法认为他们是平等的。该算法首先为模式的每个元素预先计算一组包含一个位的位掩码。然后它就可以用非常快的按位运算来完成大部分工作。

于 2009-12-07T16:38:33.090 回答