二分查詢演算法
定義:在乙個單調有序的集合中查詢元素,每次將集合分為左右兩部分,判斷解在哪個部分中並調整集合上下界,重複直到找到目標元素。
時間複雜度:o(logn),優於直接順序查詢o(n)
二分法在acm中更多查詢乙個最優解,而非僅僅查詢乙個數
常見擴充套件:
對於某些問題,如果答案具有特定範圍,並且驗證答案是否成立的函式具有單調性。則可以在範圍內對答案進行二分驗證,從而快速確定答案。
重要模型
1.這個演算法除了有序序列查詢值外,在求最優解的問題上也很有用。
2.若有乙個「求滿足某個條件c(x)的最小x」 的問題,如果所有的x』 >=x也滿足c(x』)的話,就可以用二分查詢來解決。首先我們將區間的左端點初始化為不滿足c(x)的值,右端點初始化為滿足c(x)的值。然後每次取中點mid=(low+high)/2,判斷c(mid)是否滿足並縮小範圍,直到
(low,high],足夠小了為止。最後high就是要求的最小值。
3.最大化問題也可以用同樣的方法求解,請自行思考。
4.這樣便把最優化問題轉化為可行性問題。這種演算法也叫作「二分答案」。
5.滿足這樣性質的問題典型的有「最大值最小化」、「最小值最大化」
注意1.在輸出小數的問題中,一般會指定允許誤差範圍,在二分時設定合理的精度。
2.迴圈終止條件可設為像(ub-lb)>eps這樣,如果eps太小,就可能會因為浮點小數精度的原因導致死迴圈
ACM課程心得
ios sync with stdio false 在c 中的輸入和輸出有兩種方式,一種是scanf和printf,另一種是cin和cout,這兩種方法看似,實則相差很大 一.首先,scanf與printf使用的標頭檔案是stdio.h cin與cout的標頭檔案是 iostream 二.兩者在效率...
ACM課程心得
課程上介紹到了記憶化搜尋 1.記憶化搜尋的實質是動態規劃,效率也和動態規劃接近,形式是搜尋,簡單直觀,也容易編寫,不需要進行什麼拓撲排序了。可以歸納為 記憶化搜尋 搜尋的形式 動態規劃的思想 在數塔例題中的應用 在求max 2,1 max 2,2 的時候兩次呼叫函式max 3,2 也就是說,函式ma...
ACM課程心得
搜尋 搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題解空間的部分或所有的可能情況,從而求出問題的解的一種方法。狀態 對問題往某乙個時刻進展情況的數學描述,或者是數學抽象。狀態轉移 動態規劃中本階段的狀態往往是上一階段狀態和上一階段決策的結果,在盡可能短的時間內找到最優化問題的全域性最優解或近似...