编程面试。实现自动完成

时间:2015-11-09 21:15:09

标签: algorithm data-structures

当您在文本框中输入字母时,它将获得以您输入的前几个字符开头的用户列表。我尝试将数据存储在哈希映射中,其中包含0到n的键每个条目的字母。例如,对于Chris,我在哈希映射中有一个带有键的条目:

Ç 章 CHR CHRI 克里斯

这在速度方面非常有效,但在内存方面效率低下。问题是:你将如何有效地实施它?由于我表示这是一个编程面试问题,适合有效实现该功能的数据结构是什么?

2 个答案:

答案 0 :(得分:2)

将数据存储在树中而不是散列映射中。您可以在用户输入的范围内导航树,然后子树将包含他们可以输入内容的所有可能选项。

以这个示例树为例。

          C
         / \
        A   U
       /|   |\
      R B   B L
     /         \
    D           T

假设用户输入了C和A.这意味着图表的以下部分包含可能的自动完成建议。

          C
         / 
        A     CA
       / \ 
      R   B   CAR CAB
     /         
    D         CARD

它仍然可以构建一个相当广泛的结构,但它也非常有效地遍历,并且存储起来也相当有效。

答案 1 :(得分:2)

有一个类似的问题由社区回答(用户:phimuemue):Updated Fiddle

我只是从这篇文章中复制,你可以在这篇文章中找到详细信息和链接。

  • 尝试
  • 后缀树
  • 定向非循环字图
  • 后缀数组
  • Patricia trie