来自文本文件的单词建议的数据结构

时间:2016-04-05 02:03:07

标签: algorithm prefix trie suffix

问题:我们得到一个包含许多行文本的文本文件。现在用户将输入几个字母,我们必须根据我们给出的文件中的文本给出自动完成建议。 我们假设该文件包含computer science is fun. computer engineering is awesome。 现在,如果用户输入com,我们需要提供建议computer sciencecomputer engineering。如果用户输入is,则建议应为funawesome。用户可以输入文本文件中可能包含或可能不包含的任何单词。如果单词不在文件中,则不应该有任何建议。

这个问题的最佳数据结构是什么 我知道我们可以构建一个特里结构,但是当用户键入computer时,我们可能只能建议com

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

的制备:将

  1. 将文本文件的所有行读作字符串数组
  2. 按字典顺序排列此数组
  3. 查询:

    1. 根据输入字符串获取lower bound索引:first
    2. 将输入字符串的最后一个字符的值增加1(如果不是最大值),并为此新输入字符串获取lower bound索引last。如果您的最后一个字符无法递增,请使用索引结束后的索引。
    3. 所有可能的建议都在这两个边界之间的排序数组中,不包括最后一个索引[first, last)

      如果建议太多,您可以过滤建议3个最短的建议,或按统计频率排序。

      您还可以打印建议数量而不是建议它们。类似于谷歌告诉你有多少页面符合你的查询的方式。然后,只有当您的UI可以管理匹配数量时才建议字符串。