文本自动完成的最佳数据结构是什么?

时间:2012-02-27 20:30:15

标签: algorithm data-structures performance

我有很长的单词列表,我想显示以用户输入的文字开头的单词。当用户输入字符时,应用程序应更新显示给用户的列表。它应该像Android上的AutoCompleteTextView。我只是想知道存储单词的最佳数据结构,以便搜索速度非常快。

4 个答案:

答案 0 :(得分:10)

可以使用特里。 http://en.wikipedia.org/wiki/Trie https://stackoverflow.com/search?q=trie

一篇不错的文章 - http://www.sarathlakshman.com/2011/03/03/implementing-autocomplete-with-trie-data-structure/

PS:如果你有一些“不分支”的子序列,那么你可以通过使用基数trie来节省空间,这是一个trie实现,在可能的情况下将几个字符放在节点中 - http://en.wikipedia.org/wiki/Radix_tree < / p>

答案 1 :(得分:1)

您可能会发现此主题很有趣:

这不是你想要的,而是你问题的略微扩展版本。

答案 2 :(得分:1)

为了实现自动完成功能,还使用了三元搜索树(TST):

http://igoro.com/archive/efficient-auto-complete-with-a-ternary-search-tree/

但是,如果要在字符串中查找任何随机子字符串,请尝试使用广义后缀树。

http://en.wikipedia.org/wiki/Generalised_suffix_tree

答案 3 :(得分:0)

尝试(及其各种变体)在这里很有用。有关此主题的更详细的处理方法是paper。也许你可以为Android实现完成trie?