二分內容整理(待補充

2022-08-09 10:36:13 字數 1024 閱讀 5376

內容來演算法競賽高階指南,我把自認為的重點寫了下來,方便檢視

while(l>1;

if(a[mid]>=x) r=mid;

else l=mid+1;

}cout<>1;

if(a[mid]<=x) l=mid;

else r=mid-1;

}cout關鍵是倆個寫法的的mid的取值,如果對第二段**也是(l+r)>>1,那麼當r-l等於1時候,就有mid=(l+r)>>1=l。

若是進入l=mid,則死迴圈,若進入r=mid-1,則l>r,迴圈不能以l>r結束。(能用<<1別/2,因為右移是向下取整而除法是向零取整。可能會發生意想不到的錯誤)

步驟:1.分析問題,左右區間那個是可行區間,以及mid歸屬哪一半段。

2.根據分析結果選擇**1或者**2。

3.二分的中止條件即l==r,該值就是答案所在的位置。

bool check(int x) // 檢查x是否滿足某種性質

區間[l, r]被劃分成[l, mid]和[mid + 1, r]時使用:while (l < r)

ans=l;

區間[l, r]被劃分成[l, mid - 1]和[mid, r]時使用:
while (l < r)

ans=l;

一般需要保留k位小數的時候,取eps=10^(-k+2。

while(r-l>1e-5)

for(int i=1;i<=100;i++)

固定迴圈得出的精度一般會比用eps高一點。

物件,單峰函式(詳情請回憶數學課本

物件單峰函式f,在定義域上[l,r]上,取lmid與rmid,將函式分為三段。

1.若f(lmid)f(rmid),同上,令r=rmid。

和二分相同,也是在log級別求出極值。

ps:一定要注意題目給定的東西抽象出的函式是不是嚴格單調的。

二分查詢(待補充)

二分查詢演算法是在有序陣列中用到的較為頻繁的一種演算法,在未接觸二分查詢演算法時,最通用的一種做法是,對陣列進行遍歷,跟每個元素進行比較,其時間為o n 但二分查詢演算法則更優,因為其查詢時間為o lgn 譬如陣列,查詢元素6,用二分查詢的演算法執行的話,其順序為 1.第一步查詢中間元素,即5,由於...

二分查詢補充

求出序列中第乙個大於等於x的元素的位置l以及第乙個大於x的元素的位置r,這樣元素x在序列中的存在區間就是左閉右開區間l,r 例如對下標從0開始 有5個元素的序列來說,如果要查詢3,則應當得到l 1 r 4 如果查詢5,則應當得到l r 4 如果查詢6,則應當得到l 4 r 5 而如果查詢8,則應當得...

二分查詢 整理

別人不知道,反正我早上是寫了好久,這個查詢演算法,將查詢的複雜度從 o n 降到了 o logn 當之無愧的的好演算法,更是許多高階演算法的優化策略之一。二分查詢之基本思路 雖然二分查詢是乙個很吊的演算法,但是跟很多演算法一樣,需要使用的基礎條件 序列有序!先假設乙個單調非增序列 1 2 3 4 5...