首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于大量可搜索数据的C++高效容器?

用于大量可搜索数据的C++高效容器?
EN

Stack Overflow用户
提问于 2010-04-28 22:00:40
回答 6查看 6.1K关注 0票数 16

我正在为一个大学项目实现一个基于文本的拼字游戏版本。

我的字典相当大,大约有400.000个单词(std::string)。

如果我去找一个vector<string> ( O(n) ),就效率而言,搜索一个有效的单词会很糟糕。有什么好的选择吗?别忘了,我是大一新生。不要太复杂!

耽误您时间,实在对不起!

弗朗西斯科

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-04-28 22:02:39

如果您想使用标准库中的内容,您可以使用std::set,并将单词作为关键字。这会给你对数搜索时间。

由于您的字典可能是静态的(即只创建一次且未修改),因此您还可以使用std::vector,使用std::sort对其进行排序,然后在排序后的向量上使用std::binary_search来查找单词。这也会给出对数搜索时间,并且可能比set更节省空间。

如果你想实现你自己的数据结构,trie将是一个很好的选择。

票数 23
EN

Stack Overflow用户

发布于 2010-04-28 22:11:12

set对此很自然,因为除了使用向量之外,它几乎不需要任何工作。即便如此,我还是会教你一些你通常不会学到的东西,直到你成为一个专业人士。不要过早地进行优化。我在一台现代计算机上打赌,在40K字符串向量中查找线性字典只需要.001秒。

在一个集合中,它是O(log ),可能需要.00001秒。

任何不在STL中的东西都是在浪费时间。不要在一个10美分的问题上花费10美元。

票数 10
EN

Stack Overflow用户

发布于 2010-04-28 22:18:41

trieradix tree将为您提供搜索时间和插入时间,它们与要搜索的字符串的长度成线性关系。

(请注意,对于任何搜索算法,您要搜索的字符串长度都是线性的,这是因为比较或散列字符串的长度是线性的--因此,在二进制搜索、二叉树或线性搜索的运行时间中,通常会忽略字符串长度的线性部分。)

如果您的库中还没有这些解决方案,那么这些解决方案可能过于夸张了。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2730117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档