Algorithm 相同长度字符串的最佳方式字符串匹配算法?

Algorithm 相同长度字符串的最佳方式字符串匹配算法?,algorithm,string-matching,Algorithm,String Matching,我需要实现一个字符串匹配算法来确定哪些字符串最匹配。我看到当这个固定长度可以得到时,汉明距离是一个很好的匹配算法 如果我使用Levenshtein距离公式,在匹配质量上有什么优势吗?我知道这种方法效率较低,因为它考虑了可变长度的字符串,但我真正关心的是匹配的质量。另外,有没有更好的算法我想考虑一下呢?我在Java工作,如果这有什么不同的话 非常感谢考虑字符串:“abcdefg”和“bcdefgh” Levenshtein距离为2。汉明距离(对字符而不是位进行操作)为7 因此,这实际上取决于您

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

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

非常感谢

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

Levenshtein距离为2。汉明距离(对字符而不是位进行操作)为7

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

考虑一下弦:“abcdefg”和“bcdefgh”

Levenshtein距离为2。汉明距离(对字符而不是位进行操作)为7


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

你可能会发现有趣的

bitap算法(也称为 移位或,移位和或 Baeza-Yates-Gonnet算法)是一种 模糊字符串搜索算法。这个 算法判断给定的文本是否 包含一个子字符串,该子字符串是 “近似等于”给定值 模式,其中近似相等 根据Levenshtein定义 距离-如果子字符串和 图案在给定距离k内 然后是算法 认为他们是平等的。算法 首先预计算一组 每个位包含一个位的位掩码 模式的元素。那就是 能够用计算机完成大部分工作 按位操作,即 非常快


你会发现这本书很有趣

bitap算法(也称为 移位或,移位和或 Baeza-Yates-Gonnet算法)是一种 模糊字符串搜索算法。这个 算法判断给定的文本是否 包含一个子字符串,该子字符串是 “近似等于”给定值 模式,其中近似相等 根据Levenshtein定义 距离-如果子字符串和 图案在给定距离k内 然后是算法 认为他们是平等的。算法 首先预计算一组 每个位包含一个位的位掩码 模式的元素。那就是 能够用计算机完成大部分工作 按位操作,即 非常快


你能描述一下你对比赛质量的评价吗?这是一个主观的衡量标准,所以如果你能描述你的目标,你会得到更好的答案。对于两个字符串,比如AHDJD和KDLOS,我想判断它们之间的“接近程度”。所以AAAA和AAAA将是100%的匹配。BAAAA和AAAA将接近97%,KAAAA和AAAA将接近93%。。。BJKDZ和AAAA几乎不一样。。。这有帮助吗?你能描述一下你对比赛质量的评价吗?这是一个主观的衡量标准,所以如果你能描述你的目标,你会得到更好的答案。对于两个字符串,比如AHDJD和KDLOS,我想判断它们之间的“接近程度”。所以AAAA和AAAA将是100%的匹配。BAAAA和AAAA将接近97%,KAAAA和AAAA将接近93%。。。BJKDZ和AAAA几乎不一样。。。那有用吗?我明白了。听起来像是海明距离已经过时了,因为你的插图让莱文施坦看起来更合适。有没有其他的算法你知道我想考虑的?你在另一个评论中说你想要D(“AAAAA”,“KaaAa”)>D(“AAAAA”,“BaaAA”)。Levenshtein没有这样做,两种情况下都是1。恐怕我不知道其他相关的算法。但也许通过将每个字符分成(比如)2位块,并计算这些块上的Levenshtein距离,而不是字符上的Levenshtein距离,你可能会得到更接近你想要的东西。但是仍然不正确,因为更改O->P比更改P->Q翻转更多位。啊,这样如何:您可以计算相应字符之间的均方根距离。('a'-'k')^2是100,('a'-'b')^2只是1。这意味着“abc”与“cba”的关系要比“amz”与“zam”的关系更为密切,所以你可能仍然得不到你喜欢的结果。我明白了。听起来像是海明距离已经过时了,因为你的插图让莱文施坦看起来更合适。有没有其他的算法你知道我想考虑的?你在另一个评论中说你想要D(“AAAAA”,“KaaAa”)>D(“AAAAA”,“BaaAA”)。Levenshtein没有这样做,两种情况下都是1。恐怕我不知道其他相关的算法。但也许通过将每个字符分成(比如)2位块,并计算这些块上的Levenshtein距离,而不是字符上的Levenshtein距离,你可能会得到更接近你想要的东西。但是仍然不正确,因为更改O->P比更改P->Q翻转更多位。啊,这样如何:您可以计算相应字符之间的均方根距离。('a'-'k')^2是100,('a'-'b')^2只是1。这意味着“abc”与“cba”的关系要比“amz”与“zam”的关系密切得多,所以你可能仍然得不到你喜欢的结果。