定義:二分搜尋也稱折半搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。
運用前提:必須是排好序的。
輸入並不一定是陣列,也可能是給定乙個區間和終止的位置。
優點:、
缺點:採取自平衡二叉查詢樹
可在o(nlogn)的時間內用給定的資料構建出一顆二叉查詢樹。
可在o(logn)的時間內對資料進行搜尋
可在o(logn)的時間內完成插入和刪除的操作
當:輸入的陣列或區間是有序的,且不會常變動,要求從中找出乙個滿足條件的元素->二分搜尋binary
基本結題模板
遞迴:優點是簡潔
缺點是執行消耗大
int binary_search(int nums,int target,int low,int high)
else
}
確定搜尋的範圍和區間
取中間的數判斷是否滿足條件
如果不滿住,判斷應該往那個半邊繼續進行搜尋。
int binary_search(int nums,int target,int low,int high)
else
}return -1;
}
找確定的邊界
greedy 總是做出在當前看來最好的選擇
不從整體的角度去考慮,僅對區域性的最優解感興趣
什麼問題適用貪婪演算法?
只有當哪些區域性最優策略能產生全域性最優策略的時候。
揹包問題:
有三種不同的貪婪策略
1、選取價值最大的物品
2、選取重量最小的物品
3、選取價值/重量比最大的物品
貪婪物品有 a b c
重量分別是: 25,10,10
價值分別是:100,80,80
STL中的二分查詢(binary search)
stl中對於有序序列 vector,list等 提供了相當相當強大的二分搜尋binary search演算法。對於可以隨機訪問容器 如vector等 binary search負載度為對數級別 logn 對於非隨機訪問容器 如list 則演算法複雜度為線性。現在簡要介紹一下幾種常用的binary s...
Java 二分搜尋 二分查詢
對陣列元素進行逐個查詢顯然是費時費力的工作,我們可以使用一些方法快速地搜尋出陣列中元素的指定位置.接下來我們介紹一種方法 二分搜尋法 二分搜尋法充分利用了元素間的次序關係.基本思想 將n元素分成個數大致相同的涼拌,取arr n 2 與欲查詢的x做比較,如果 下面將採用兩種方式 遞迴 非遞迴 來展示二...
二分(二分答案 二分搜尋)與單調性
經典二分搜尋是二分空間範圍。二分答案又叫二分猜值,是二分解的值空間。其實可以統一,普通的二分搜尋也是二分答案值域 下標空間,也是猜值。二分必須滿足單調性,最直觀的,二分搜尋只能在有序陣列上進行。單調性體現在,下標和元素值是單調的,也就是 if j i 有 a j a i 一般二分答案解決的問題是最優...