如何在C ++中搜索特定值的非常大的数组?

时间:2017-09-24 15:25:26

标签: c++ algorithm search

面试官问我这个问题。如何搜索特定值的大型数组(数千或数百万个值)。

我建议二元搜索对项目进行排序并且数组大小较小的情况。如果你想要一个大数组中的最大值(值是1次传递后最右边的值),我还建议对冒泡排序算法进行1次迭代。

但我不确定哪些算法可以在固有的随机分类数组索引中提取值。

2 个答案:

答案 0 :(得分:9)

  1. 线性搜索。这将需要O(n)。如果阵列大小在数千和数百万的范围内,它应该足够好。

  2. 如果您更频繁地进行搜索操作。您可能希望将数组转换为哈希表。构建哈希表首先需要O(n),然后每个搜索操作都需要O(1)。对于您执行的每项搜索操作,解决方案1都将O(n)

  3. 如果数组非常大,您可以利用多个线程同时搜索数组。将数组划分为多个部分,每个线程在其部分中搜索值。

答案 1 :(得分:2)

只是标准的线性搜索。从头开始,搜索到最后(在最坏的情况下)。

如果您不保证元素排序,则需要检查每个元素。这意味着你可以期待的最好的复杂性是O(n)。在这些条件下,无论数组的大小如何,这都是答案。