python演算法——二分查詢
阿新 • • 發佈:2018-11-06
二分查詢
舉個例子-----猜數字:
假如需要你猜一個1–100的數字,每次都會告訴你猜大了或是猜小了
最笨的方法是:
1—猜小了
2—猜小了
3—猜小了
…
這種方法很慢,應為它幾乎要檢查所有的數字。
比較快的方法是:
你可以先猜50(0和100中間)—猜小了
在猜75(50和100中間)—猜大了
在猜63(50和75中間)—猜大了
…
這種方法很快,因為每次都會排除一半的錯誤答案
每次排除的數字個數為
50個元素----25個元素—13個元素—7個元素—4個元素----2個元素—1個元素
這樣的話不管正確答案是多少都能在7步內找到正確答案
這就是二分查詢。
*注:二分查詢的大O執行時間為logn(對數時間)
二分查詢程式碼
二分查詢程式碼如下:
def erfen(list, item): low = 0 high = len(list)-1 while low <= high: middle = int((low+high)/2) guess = list[middle] if guess == item: return middle if guess > item: high = middle-1 else: low = middle+1 print(erfen([1, 3, 5, 7, 9], 9))
這裡返回的是元素下標。