【问题标题】:What is the best data structure for text auto completion?文本自动完成的最佳数据结构是什么?
【发布时间】:2012-03-17 07:51:45
【问题描述】:

我有一长串单词,我想显示以用户输入的文本开头的单词。当用户输入一个字符时,应用程序应该更新显示给用户的列表。它应该类似于 Android 上的 AutoCompleteTextView。我只是对存储单词的最佳数据结构感到好奇,以便搜索非常快。

【问题讨论】:

  • 我认为哈希表是最好的。我不确定您使用的语言或平台,所以一般来说哈希表是快速和动态的。
  • 嗯...首先我们需要了解您正在使用的平台。安卓? IOS?视窗? Linux?操作系统?网页还是 HTML?
  • @c0d3Junk13 如何在哈希表中搜索具有给定前缀的字符串?
  • @c0d3Junk13 我问这个问题是因为问题很清楚需要什么,而且由于哈希表似乎与这些要求没有任何共同之处,我认为建议它完全没有意义。
  • @c0d3Junk13 你不需要告诉我哈希表有很多好的用途。但是this question的用例不在其中。此外,我当然希望大多数程序员都知道存储数据的“最佳方式”取决于你需要用它做什么。正如我们似乎同意的那样,哈希表对于按前缀搜索(即自动完成)是不实用的。哦,至于为什么我“选择”你的评论:我原本希望你的建议有用的,我只是错过了这一点,但你似乎确认那不是确实如此。

标签: algorithm data-structures performance


【解决方案1】:

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

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

PS : 如果你有一些“不分支”的子序列,那么你可以通过使用基数特里树来节省空间,这是一种特里树实现,尽可能在节点中放置多个字符 - http://en.wikipedia.org/wiki/Radix_tree

【讨论】:

    【解决方案2】:

    你可能会觉得这个话题很有趣:

    这并不完全是您想要的,而是您问题的略微扩展版本。

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2010-12-19
          • 2014-06-02
          • 2011-10-23
          • 2018-07-17
          • 2011-05-15
          • 1970-01-01
          • 2017-01-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多