二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。
比如在有序列表:1 3 4 6 7 8 10 13 14
中查詢4,操作過程如下圖:
二分查詢有兩種實現,一種是遞迴實現,一種是非遞迴實現。
1、非遞迴實現:
def
binary_search
(alist, item)
: first =
0 last =
len(alist)-1
while first<=last:
midpoint =
(first + last)/2
if alist[midpoint]
== item:
return
true
elif item < alist[midpoint]
: last = midpoint-
1else
: first = midpoint+
1return
false
testlist =[0
,1,2
,8,13
,17,19
,32,42
,]print
(binary_search(testlist,3)
)print
(binary_search(testlist,13)
)
2、遞迴實現
def
binary_search
(alist, item):if
len(alist)==0
:return
false
else
: midpoint =
len(alist)//2
if alist[midpoint]
==item:
return
true
else
:if item
:return binary_search(alist[
:midpoint]
,item)
else
:return binary_search(alist[midpoint+1:
],item)
testlist =[0
,1,2
,8,13
,17,19
,32,42
,]print
(binary_search(testlist,3)
)print
(binary_search(testlist,13)
)
演算法分析二分答案也就是說,將要獲得的答案進行二分查詢,通常這些答案滿足:最大值最小、最小值最大。二分答案有兩個條件:單調、有界。下面放幾道二分查詢的題目(題目來自洛谷,純粹是為了練習二分思想):
木材加工、路標設定、跳石頭
查詢演算法 二分查詢python實現
二分查詢 時間複雜度為o logn 空間複雜度為o 1 二分查詢也叫做折半查詢,是一種在有序陣列中查詢某一特定元素的查詢演算法。查詢過程從中間元素開始。如果中間元素正好是要查詢的元素,則查詢過程結束。def binary search1 arr,value binary search1 尋找與val...
二分查詢演算法python實現
二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其 缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成...
python實現二分查詢演算法
二分演算法採用分而治之的思想,演算法思路比較簡單,便直接附上一端 def binarysearch ll,x length len ll height length 1ini 0 while ini height mid ini height 2findx ll mid if findx x ret...