4.1 二分查詢函式
p,如果找到,則返回元素下標,如果找不到,則返回-1。要求複雜度o(log(n))
int binarysearch(int a, int size, int p)
return -1;
} //複雜度o(log(n))
定整數p小的,下標最大的元素。找到則返回其下標,找不到則返回-1
int lowerbound(int a, int size, int p) //複雜度o(log(n))
return lastpos;
}
4.2 二分法求方程的根
求下面方程的乙個根:f(x) = x3-5x2+10x-80 = 0,若求出的根是a,則要求 |f(a)| <= 10-6
解題思路:對f(x)求導,得f』(x)=3x2-10x+10。由一元二次方程求根公式知方程f』(x)= 0 無解,因此f』(x)恆大於0。故f(x)是單調遞增的。易知 f(0) < 0且f(100)>0,所以區間[0,100]內必然有且只有乙個根。由於f(x)在[0,100]內是單調的,所以可以用二分的辦法在區間[0,100]中尋找根。
#include #include #include using namespace std;
double eps = 1e-6;
double f(double x)
int main()
printf("%.8f\n", root);
printf("%d", triedtimes);
return 0;
}
4.3 尋找指定和的整數對
輸入n ( n<= 100,000)個整數,找出其中的兩個數,它們之和等於整數m(假定肯定有解)。題中所有整數都能用 int 表示
4.4 農夫和奶牛
農夫 john 建造了一座很長的畜欄,它包括n (2≤n≤100,000)個隔間,這些小隔間的位置為x0,…,xn-1 (0≤xi≤1,000,000,000,均為整數,各不相同).john的c (2≤c≤n)頭牛每頭分到乙個隔間。牛都希望互相離得遠點省得互相打擾。怎樣才能使任意兩頭牛之間的最小距離盡可能的大,這個最大的最小距離是多少呢?
基礎 二分演算法學習筆記
1 二分的基本用法是在單調序列或單調函式中進行查詢。2 當問題的答案具有單調性時,就可以通過二分把求解轉化為判定 判定一般比求解容易實現。這裡都是個人寫法,可以跳過 1 整數域 1 原則 2 流程 分析問題,確定左右半段哪個是可行區間,以及mid歸屬哪一半。選擇寫法 l mid還是r mid l r...
基礎 二分演算法學習筆記
1 二分的基本用法是在單調序列或單調函式中進行查詢。2 當問題的答案具有單調性時,就可以通過二分把求解轉化為判定 判定一般比求解容易實現。這裡都是個人寫法,可以跳過 1 整數域 1 原則 2 流程 分析問題,確定左右半段哪個是可行區間,以及mid歸屬哪一半。選擇寫法 l mid還是r mid l r...
基礎演算法 二分
二分模板 bool check int x 檢查x是否滿足某種性質 區間 l,r 被劃分成 l,mid 和 mid 1,r 時使用 int bsearch 1 int l,int r return l 區間 l,r 被劃分成 l,mid 1 和 mid,r 時使用 int bsearch 2 int...