二分搜尋演算法

2021-08-21 23:47:37 字數 1036 閱讀 3754

1.(x+y)/2與x+(y-x)/2區別

運算子/取整朝零方向取整,5/2=2,-5/2=-2

用x+(y-x)/2好處是確保分界點總是靠近區間起點

2.基本二分查詢的實現方法:

int bsearch(int *a,int x,int y,int v)

return -1;

}

3.設lower_bound和upper_bound的返回值分別為l和r,則v出現的子串行為[l,r),如果v不存在,l=r

所以,l-r=v的出現的個數

4.二分搜尋演算法求最優解思想:

a.求滿足某個條件c(x)的最小的x

當y>x時,也滿足條件c(x),

我們設乙個區間左右端點分別為(l,r]

我們讓左端點l初始化為不滿足c(x)的值

右端點r初始化為滿足c(x)的值

每次取中點,判斷是否滿足c(x),並縮小範圍

直到(l,r]足夠小,輸出r就是要求的最小值

b.求滿足某個條件c(x)的最大的x

當y< x時,也滿足條件c(x),

我們設乙個區間左右端點分別為[l,r)

我們讓右端點r初始化為不滿足c(x)的值

左端點l初始化為滿足c(x)的值

每次取中點,判斷是否滿足c(x),並縮小範圍

直到[l,r)足夠小,輸出l就是要求的最大值

c.關於條件c(x)

一般判斷條件會比較簡單,

若要求最小的x,如果滿足條件,那麼把r賦值為x

如果不滿足條件,那麼把l賦值為x

若要求最大的x,如果滿足條件,那麼把l賦值為x

如果不滿足條件,那麼把r賦值為x

為什麼呢,因為最小的x,(l,r],右邊大的r一定是滿足條件的數,左邊l是不滿足條件的數

d.關於結束判定

指定迴圈次數,我們讓他搜尋足夠多次,這樣那個在半開半閉區間中的端點必定是最接近我們的答案

二分搜尋演算法

今天我勉強搞懂了二分查詢演算法,我覺得很有收穫,這是個不錯的演算法,希望還不知道 不懂二分演算法的朋友能看看!二分查詢 二分查詢的前提是陣列一定是有序的 傳入乙個陣列 t 傳入乙個查詢元素 t key 返回查詢結果 class myutil else if key.compareto x mid 0...

二分搜尋演算法

在電腦科學中,二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 對數搜尋 英語 logarithmic search 是一 種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束...

二分搜尋演算法

一段區間,劃分為兩段 左區間 右區間 首先 設定 l 0,r arr.length 1 設定兩端的指標 int mid l r 1 check mid 然後!這個地方 mid 需要 1,不然會死迴圈,int mid l r 1 1 如果為true,則答案 在 mid,r 替換 l,r l mid f...