在没有线性搜索的情况下,在非常大的数组中找到比给定数字更小的数字

时间:2017-10-14 08:10:01

标签: c++ arrays stl

我想找到最后一个小于或等于给定数字的数字。由于整数向量非常大,O(n)效率不高。

我将矢量分成两部分并进行并行搜索。

让我们通过一个例子来理解: -

vector <int> arr = {1, 8, 7, 1, 2, 9, 5, 7, 4 ,6};

我想找到一个小于或等于2的数字的最后出现,所以我把数组分成两个:

{1, 8, 7, 1, 2} and {9, 5, 7, 4, 6}

并从两个数组中的end开始搜索。

正如我们所看到的,一个小于或等于2的数字位于第5位(索引4),但它可能位于任何大于5的位置,所以我们仍然必须完全搜索第二个数组,因为我们的目标是找到最大指数的元素。

我想询问是否有任何stl函数在第二个数组中找到小于2的数字,这样我就不会完全搜索第二个数组。

我可以使用std :: find在第二个数组中找到小于2的数字吗?

编辑:小于或等于2的数字位于第5位(索引4),但它可能位于任何大于5的位置,因此我们在第一个数组中的第5位停止,但继续搜索第二个数组。假设我们从位置7(索引6)得到元素1,因为7> 5所以我们只返回位置7并且程序结束。这使我们无法完全搜索第一个数组。

1 个答案:

答案 0 :(得分:0)

由于我们从向量开始,如果我们从头到尾搜索,我们必须检查每个元素。

但是,如果我们从头到尾搜索,我们可以在谓词满足后立即停止。这使得算法最坏情况为O(N),最佳情况为O(1)。

Num:    Value          Size Type    Bind   Vis      Ndx Name
 49: 00000000002052a0     8 OBJECT  GLOBAL DEFAULT   27 stderr@GLIBC_2.2.5 (3)