1. 程式人生 > >二分、三分查詢演算法模板

二分、三分查詢演算法模板

二分、三分查詢演算法的原理及實現程式碼。

簡單定義

在一個單調有序的集合中查詢元素,每次將集合分為左右兩部分,判斷解在哪個部分中並調整集合上下界,重複直到找到目標元素。

時間複雜度

O (logn),優於直接順序查詢O(n)

原理

photo

左閉右開二分

123456789101112131415161718 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