二分、三分查找算法模板

来源:互联网 发布:中国统计年鉴数据下载 编辑:程序博客网 时间:2024/06/06 00:32


二分、三分查找算法的原理及实现代码。

简单定义

在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。

时间复杂度

O (logn),优于直接顺序查找O(n)

原理

photo

左闭右开二分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int search2(int array[], int n, int v)
{
int left, right, middle;
left = 0, right = n; //左闭右开区间的二分查找。
while (left < right)
{
middle = (left + right) / 2;
if (array[middle] > v)
right = middle;
else if (array[middle] < v)
left = middle + 1;
else
return middle;
}
return -1;
}

STL

photo

Double型二分

while(fabs(right-left)>eps)//判断语句注:1、right与left之差进行判断    2、eps的值够精度,不然很容易wa

三分法

在二分查找的基础上,在右区间(或左区间)再进行一次二分,这样的查找算法称为三分查找,也就是三分

当需要求某凸性或凹形函数的极值,通过函数本身表达式并不容易求解时,就可以用三分法不断逼近求解。

photo

0 0
原创粉丝点击