我需要实现字符串匹配算法来确定哪些字符串最匹配。我看到汉明距离是一个很好的匹配算法,当这个固定长度可以获得。
如果我使用Levenshtein距离公式,匹配质量是否有任何优势?我知道这种方法效率较低,因为它考虑了可变长度的字符串,但我真正关心的是匹配的质量。另外,有没有更好的算法我可能要考虑?如果这有任何不同,我在Java工作。
http://en.wikipedia.org/wiki/Levenshtein_distance
http://en.wikipedia.org/wiki/Hamming_distance
非常感谢
答案 0 :(得分:3)
考虑字符串:“abcdefg”和“bcdefgh”。
Levenshtein距离为2.汉明距离(对字符而不是位进行操作)为7。
所以这取决于你是否想要将这些字符串视为相似或不相似。汉明距离有其适当的用途,但“这些字符串看起来与人类相似吗?”不是其中之一。
答案 1 :(得分:1)
您可能会对Bitap algorithm.
感兴趣bitap算法(也称为 转移 - 或转移 - 或 Baeza-Yates-Gonnet算法)是一个 模糊字符串搜索算法。该 算法告诉是否给定文本 包含一个子字符串 给定的“大致相等” 模式,近似相等 根据Levenshtein的定义 距离 - 如果子串和 模式在给定距离k内 彼此,然后算法 认为他们是平等的算法 首先是预先计算一组 每个包含一位的位掩码 模式的元素。然后就是 能够完成大部分工作 按位运算,即 非常快。