用C ++存储和搜索数字的最佳方法

时间:2014-10-06 11:37:42

标签: c++ arrays algorithm search data-structures

我有一个非常大的数组存储一些数字。我的任务是查找数组中是否存在特定数字,或者是否有效。我应该选择哪种算法和数据结构?

几个假设:

  1. 数组中的每个数字都是唯一的。
  2. 我不关心在数组中找到数据的位置我只想在发现数据时返回true,否则返回false。
  3. 我将使用C ++作为编程语言。

    请建议。

    由于

3 个答案:

答案 0 :(得分:0)

使用unordered_set进行恒定时间查找。

还有bitsets等选项。具体取决于"非常大"并且存储的值的稀疏程度与实际存在的数量相比有多少。

答案 1 :(得分:0)

似乎 unordered_set 适合您的要求。

PS:请记住这个集合中的所有元素都是不可变的

答案 2 :(得分:0)

检查元素(数字)是否为集合(数组)成员的已知最佳方法是使用bloom filters。如果set随时间变化或者在集合之间存在设置操作,则它很有效。 Bloom过滤器易于实现,并且实现良好are availble

如果set是静态的(即永不改变),好的方法是使用perfect hash function。这需要一段时间来构建,但是会胜过std :: unordered_set

提供的常用哈希函数