String 用于检索距离接近Levenshtein的字符串的数据结构

String 用于检索距离接近Levenshtein的字符串的数据结构,string,algorithm,data-structures,levenshtein-distance,String,Algorithm,Data Structures,Levenshtein Distance,例如,从一组英语单词开始,是否有一种结构/算法允许使用单词“right”作为查询快速检索字符串,如“light”和“tight”?也就是说,我希望检索到与查询字符串之间距离很小的字符串。我认为最快的方法是预先构建一个相似性缓存,您可以在O(1)时间内对其进行索引和访问。诀窍是找到常见的拼写错误添加到缓存中,这可能会变得相当大 我想谷歌也会使用他们广泛的统计查询搜索数据来做类似的事情。由于计算长度为n和m的字符串的Levenshtein距离是O(nm),因此计算所有Levenshtein距离L(q

例如,从一组英语单词开始,是否有一种结构/算法允许使用单词“right”作为查询快速检索字符串,如“light”和“tight”?也就是说,我希望检索到与查询字符串之间距离很小的字符串。

我认为最快的方法是预先构建一个相似性缓存,您可以在O(1)时间内对其进行索引和访问。诀窍是找到常见的拼写错误添加到缓存中,这可能会变得相当大


我想谷歌也会使用他们广泛的统计查询搜索数据来做类似的事情。

由于计算长度为n和m的字符串的Levenshtein距离是
O(nm)
,因此计算所有Levenshtein距离
L(querystring,otherstring)
的简单方法非常昂贵

但是,如果可视化Levenshtein算法,它基本上会用编辑距离填充n*m表。但是对于以相同的几个字母(前缀)开头的单词,Levenshtein表的前几行将是相同的。(当然,正在修复查询字符串。)

这建议使用:读取查询字符串,然后构建Levenshtein行的trie。之后,您可以轻松地遍历它以查找靠近查询字符串的字符串

(这意味着您必须为一个新的查询字符串构建一个新的trie。我不认为所有查询字符串都有类似的有趣结构。)

我想我最近看到了一篇关于这方面的文章,其中有一个很好的python实现。将添加一个链接,如果我能找到它。编辑:

此处的数据结构可能合适。它的设计目的是有效地支持“与查询词的编辑距离k以内或更小的所有词是什么?”这种形式的查询,它的性能保证相当好,实现起来也不太困难


希望这有帮助

如果这实际上是针对拼写错误的好方法,如果是针对Levenshtein距离的更多理论应用,则不太有用。你的确切意思是什么?如果这是我所想象的,那么内存使用将使它变得不切实际。@us2012,这就是目的所在。