选择什么算法

时间:2011-05-04 14:11:50

标签: algorithm

在最近的一次采访中问道:

您将使用什么数据结构在文档中实施拼写纠正。目标是查找用户键入的给定单词是否在字典中(无需更正)。 复杂性是多少?

5 个答案:

答案 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)。