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...