在数组中搜索复杂度高于 O(n) 的元素

Searching the element in array with complexity better than O(n)

本文关键字:元素 高于 数组 搜索 复杂度      更新时间:2023-10-16

我有任何数组,其中元素首先按递增顺序排列,然后按递减顺序排列

像 A[10]={1,4,6,8,3,2} ,数组中没有重复项。

如果输入为 7,则输出应为,元素不存在。

时间复杂度应该更好 thn O(n(

我通过线性搜索得到结果,将每个元素与找到的元素进行比较。但是由于我想要比O(n(更好的解决方案。

我尝试找到数组元素翻转的枢轴,然后从(0 到 pivot 元素(搜索,然后再次搜索(最后一个 elemnt 到 pivot elemnt(。

请指教。 对于 O(n(

#include<iostream>
int main()
{
int A[10]={1,4,6,8,3,2};
int i,num
cout<<"Enter the element to be searched";
cin>>num
for(i=0;i<10;i++)
{
If(A[i]==num)
{
cout<<"Element exist";
break;
}
else
cout<<"Element do not exist";
}
}

算法:

  1. 通过执行二叉搜索在log(n(中找到最大值并保存其索引。
  2. 在max的两侧进行二分搜索。
  3. 如果未找到并且元素不等于最大值,则它不存在。

如何做步骤1?

  • 选择阵列的中间
  • 对照左边的项目(你的邻居(检查它。如果更大,则最大值在右侧。否则,我们按递减顺序开始,max在左侧。选择在右侧/左侧搜索的方式取决于左侧的项目是更大还是更小。

编辑
以防万一不清楚:如果您选择第 n/2 个元素并发现 max 在左侧,那么您选择 n/4 个元素,如果最大值在其右侧,则只在元素n/4...n/2范围内继续搜索。