在 C++ 中存储和搜索数字的最佳方法
Posted
技术标签:
【中文标题】在 C++ 中存储和搜索数字的最佳方法【英文标题】:Best way to Store and Search Numbers in C++ 【发布时间】:2014-10-06 11:37:41 【问题描述】:我有一个非常大的数组来存储一些数字。我的任务是查找特定数字是否存在于数组中或是否有效。我应该使用哪种算法和数据结构?
几个假设:
-
数组中的每个数字都是唯一的。
我不关心数据在数组中的位置,我只想在找到数据时返回 true,否则返回 false。
我会使用 C++ 作为编程语言。
请提出建议。
谢谢
【问题讨论】:
使用std::set
。或排序后的std::vector
和std::binary_search
。
您实际上有一个非常大的数组,还是您正在寻找比非常大的数组更好的数据结构?
你在优化什么,数字的分布是什么?没有“最好”的方式来表示一个集合。
实现散列或使用实现散列的内置数据结构。
【参考方案1】:
使用unordered_set
进行恒定时间查找。
还有 bitset 等选项。具体取决于“非常大”的大小以及存储的值与实际存在的值相比的稀疏程度。
【讨论】:
【参考方案2】:似乎 unordered_set 适合您的要求。
PS:请记住这个集合中的所有元素都是不可变的
【讨论】:
【参考方案3】:检查元素(数字)是否是集合(数组)成员的已知最佳方法是使用bloom filters。如果集合随时间变化或者集合之间存在集合操作,它会很好地工作。布隆过滤器很容易实现,很好的实现are availble
如果 set 是静态的(即永远不会改变),那么好的方法是使用 perfect hash function。构建需要时间,但会优于 std::unordered_set 提供的通常散列函数
【讨论】:
以上是关于在 C++ 中存储和搜索数字的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章
永久存储具有512个浮点数和100万条记录的数组以便快速搜索的最佳方法是什么?
Django - 在DB答案中存储可以是数字还是文本的最佳方法是什么?