【发布时间】:2021-12-30 15:26:36
【问题描述】:
具有大列表的更快搜索协议? 您好,感谢您阅读我的帖子。我正在制作一些简单的自动完成软件,它将输入的单词与与英语词典中该单词的字母序列匹配的每个单词进行比较。该字典包含 400,000 个元素,因此您可以预期它会导致简单搜索的等待时间很长。
for (int j = 0; j < list.size(); j++)
{
if (list[j].length() >= input[input.size()-1].length() && input[input.size() - 1] == list[j].substr(0, input[input.size() - 1].length()))
{
suggestions.push_back(list[j]);
}
}
上面的代码可能是运行时优化效率最低的,但我尝试了其他一些方法,比如为所有 27 个字母创建一个位移变量,然后将其添加到 i.并将最大值减少到下一个字母开始(如果第一个字母的索引,比如 r,是 400,并且以 s 开头的第一个字母的索引是 800,那么我会将范围设置在 400 和 800 之间而不是 0 - 1,500,但仍然很慢)。任何帮助将不胜感激
【问题讨论】:
-
查看 trie 数据结构。
-
你可以有一个容器数组。该数组将有一个用于每个字母的插槽。该插槽将包含以该字母开头的所有单词的容器。示例
dictionary['A']将拥有一个包含所有以“A”开头的单词的容器。
标签: c++ arrays string search vector