在最近的一次采访中问道:
您将使用什么数据结构在文档中实施拼写纠正。目标是查找用户键入的给定单词是否在字典中(无需更正)。 复杂性是多少?
答案 0 :(得分:4)
我会使用“Radix”或“Patricia”树来索引字典。请参阅此处,包括用于索引字典单词的示例:https://secure.wikimedia.org/wikipedia/en/wiki/Radix_tree。在其复杂性的链接上有一个有用的讨论。
答案 1 :(得分:3)
如果我正确理解了这个问题,你会得到一本字典(或一个“正确”单词列表),并被要求指定输入单词是否在字典中。因此,您正在寻找具有非常快的查找时间的数据结构。我会选择hash table
答案 2 :(得分:2)
我会使用DAWG(定向非循环字图),它基本上是压缩的Trie。
这些常用于拼字游戏和其他单词游戏的算法,如Boggle。
我以前做过这个。具有170,000个字的TWL06 Scrabble字典适用于磁盘和RAM中的700 KB结构。
答案 3 :(得分:1)
Levenshtein distance告诉您需要更改多少字母才能从一个字符串转到另一个字符串...通过找到换句更少的字母,您可以提供正确的字词(另请参阅Damerau Levenshtein distance )
增加性能你不应该计算与整个字典的距离并用一些启发式约束它,例如以相同的第一个字母开头的单词。
答案 4 :(得分:0)
布隆过滤器。假阳性是可能的,但假阴性则不然。如你事先知道字典,你可以通过使用完美的哈希值来消除误判。(字典)。或者您可以将其用作实际字典数据结构背后的辅助数据结构。
编辑:对于布隆过滤器,复杂性当然是O(1)。