(ACM模板)二分查詢

2022-04-30 21:57:16 字數 942 閱讀 3827

二分是乙個比較大的概念,廣義上把東西(可能是問題,區間等等)一分為二都是二分。

這裡講二分查詢。

據說只有10%的程式設計師能寫對二分。雖然二分是乙個簡單的演算法。但是其變化和細節卻並不簡單。

整數二分:

因為mid取整的問題,如果不細心有可能會死迴圈。

所以寫二分查詢需要仔細考慮 答案在開/閉區間?mid向上/下取整?迴圈結束條件?這些選擇的取捨不同會導致二分的寫法不同,沒有說必須哪一種是正確的。掌握自己喜歡的寫法即可。

這裡的二分保證答案必須在[l,r]閉區間,迴圈借宿條件為(l==r),答案下標為 l 。

**如下,其中細節還是值得細細琢磨。

#include#include

#include

using

namespace

std;

const

int n=100000

;int

n,q,a[n],l,r;

intmain()

cout

scanf("

%d",&q);

l=1,r=n;

while (lcout

}

浮點數二分:

因為不用考慮取整的問題,所以浮點數二分相當好些。

注意精度問題就可以了。

double eps=1e-5

;

while (l+eps三分求單峰函式極值:

當這個函式可能是單調函式時(極值點在端點), 三分演算法無法到達端點位置, 所以要特判一下兩個端點。

int

lm, rm;

while(l

二分查詢模板

二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。演算法思路 假設目標值在閉區間 l,r 中,每次將區間長度縮小一半,當l r時,我們就找到了目標值。模板一當區間 l,r 的更新操作是r mid l mid 1 時,計算mid時不需要加1。int bsearch 1 in...

二分查詢模板

例如陣列中查詢乙個數 二分查詢的前提是整個陣列是有序的 模板 int a n int l 0,r n 1 int mid,key while l r 另外還有一些二分查詢函式 a.函式模板 binary search arr,arr size indx c.函式功能 在陣列中以二分法檢索的方式查詢,...

二分查詢模板

二分查詢模板總共有兩個 將區間分為 l,mid l,mid l,mid mid 1,r mid 1,r mid 1 r 時,如下 while l r else 將區間分為 l,mid 1 l,mid 1 l,mid 1 mi d,r mid,r mid,r 時,如下 while l r else 對...