一尘不染

Levenshtein距离算法优于O(n * m)?

algorithm

我一直在寻找一种先进的levenshtein距离算法,到目前为止,我发现的最好算法是O(n * m),其中n和m是两个字符串的长度。之所以采用这种规模的算法,是因为空间而不是时间,原因是创建了两个字符串矩阵,例如:

替代文字

有没有比O(n * m)更好的公开可用的levenshtein算法?
我不反对阅读高级计算机科学论文和研究,但没有找到任何东西。我发现有一家公司Exorbyte,据说该公司构建了一种超先进,超快的Levenshtein算法,但是,这当然是商业秘密。我正在构建一个我想使用Levenshtein距离计算的iPhone应用程序。可以使用Objective-
C的实现
,但是由于iPod和iPhone上的内存有限,因此我希望找到一种更好的算法。


阅读 216

收藏
2020-07-28

共1个答案

一尘不染

您是否有兴趣降低时间复杂度或空间复杂度?平均时间复杂度可以降低O(n + d ^
2),其中n是较长字符串的长度,d是编辑距离。如果您只对编辑距离感兴趣,而对重建编辑序列不感兴趣,则只需将矩阵的最后两行保留在内存中,则将为order(n)。

如果您能够负担得起近似值,则可以使用多对数近似值。

对于O(n + d ^ 2)算法,请寻找Ukkonen的优化或其增强的Enhanced
Ukkonen
。我所知道的最好的近似值是
Andoni,Krauthgamer,Onak撰写的

2020-07-28