Search 求集合中的最大值

Search 求集合中的最大值,search,sorting,big-o,Search,Sorting,Big O,如果我有一个数字列表,其中数字增加到某个点,然后在该点之后减少,是否有一个独立于集合大小的有限数量的猜测,我必须这样做才能找到最大值 值之间的距离是任意的,递增侧的值数量可以不同于递减侧的值数量 最好的方法是什么?检查元素1,然后是最后一个元素,然后是中间的一半?再说一遍?还是更复杂的 这种算法的处理时间是多少?您可以使用二进制搜索将两个相邻元素(而不是一个元素)与固定值进行比较。从a:=0,b:=n,i:=(a+b)/2开始,将元素(i)与元素(i+1)进行比较。如果你注意到e(i+1)>e(

如果我有一个数字列表,其中数字增加到某个点,然后在该点之后减少,是否有一个独立于集合大小的有限数量的猜测,我必须这样做才能找到最大值

值之间的距离是任意的,递增侧的值数量可以不同于递减侧的值数量

最好的方法是什么?检查元素1,然后是最后一个元素,然后是中间的一半?再说一遍?还是更复杂的


这种算法的处理时间是多少?

您可以使用二进制搜索将两个相邻元素(而不是一个元素)与固定值进行比较。从a:=0,b:=n,i:=(a+b)/2开始,将元素(i)与元素(i+1)进行比较。如果你注意到e(i+1)>e(i),你知道断点在i之后,所以设置a:=i。如果e(i)
然后复杂性将是O(logn)。它会比常规的二进制搜索稍慢,因为您需要更多的比较。

您可以根据列表中的元素数,尝试类似于有序搜索的循环算法

伪代码:

List search(int index, List listpart){
   if(listpart.length()==1){ // already found
       return listpart
   }
   else if(listpart(index+1)>listpart(i) && listpart(index-1)<listpart(i)){ //search right part
      List listpart_tmp = getlistpart(listpart, index, listpart.length())
      return search(index+(listpart.length()/4), listpart_tmp
   }
   else if(listpart(index+1)<listpart(i) && listpart(index-1)>listpart(i)){ //search left part
      List listpart_tmp = getlistpart(listpart, 0, index)
      return search(index-(listpart.length()/4), listpart_tmp
   }
   else if(listpart(index+1)<listpart(i) && listpart(index-1)<listpart(i)){ //found 
      return getlistpart(listpart, index, index)
   }
}
是一个函数,返回由给定索引之间的原始列表中的元素组成的列表

getlistpart