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

时间:2013-02-13 02:11:53

标签: string algorithm data-structures levenshtein-distance

例如,从英语单词集开始,是否有一个结构/算法允许快速检索字符串,如“light”和“tight”,使用“right”作为查询?即,我想检索与查询字符串的Levenshtein距离较小的字符串。

3 个答案:

答案 0 :(得分:4)

此处BK-tree数据结构可能合适。它旨在有效地支持“查询单词中编辑距离k以内的所有单词是什么?”形式的查询?它的性能保证相当不错,并且实施起来并不太难。

希望这有帮助!

答案 1 :(得分:1)

由于对于长度为n和m的字符串计算Levenshtein距离为O(nm),计算所有Levenshtein距离L(querystring, otherstring)的天真方法非常昂贵。

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

这表明使用trie (also called prefix tree):阅读查询字符串,然后构建一系列Levenshtein行。之后,您可以轻松遍历它以查找接近查询字符串的字符串。

意味着你必须为新的查询字符串构建一个新的trie。我不认为所有对有一个类似的有趣结构的距离。)

我以为我最近看到一篇关于这个的文章有一个很好的python实现。如果我能找到它,将添加一个链接。 修改: Here it is, on Steve Hanov's blog.

答案 2 :(得分:0)

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

我想谷歌会使用各种统计查询搜索数据做类似的事情。