1. 程式人生 > >【從0到1學演算法】二分查詢法

【從0到1學演算法】二分查詢法

說到演算法,大家應該都會腦殼疼吧。除了應付一下面試,準備過演算法,也接觸過不少演算法,但是面試完了,基本上就忘光了。但不得不說,演算法真的很重要,演算法是解決問的方法,你可能會說根本用不上,那只是因為你根本沒有演算法的思維,又如何說得上使用呢。在這裡,我會和大家一起重學演算法,閱讀《圖解演算法》入門演算法經典書籍,然後根據個人知識進行整理與補充而編寫的文章。今天講的二分查詢法,如果你對這個演算法很熟請忽略或者複習一下也未嘗不可。

二分查詢法

先來看看最簡單的查詢演算法,簡單查詢法,也可以說是美嘉演算法(美嘉經常用到的演算法)假設我在1~100的數字中查詢56使用美嘉演算法是這樣的

需要經過56次才能得到結果!當我們使用二分查詢法的時候是這樣的從中間50開始猜

小了,排除了半的數字! 查詢範圍縮小至51-100,接下來猜75

大了,又排除了一半數字!查詢範圍縮小到51-74,接下來猜62。又大了,再猜56 只猜了4次便找到了正確答案,這就是演算法的力量啊! 100個元素裡,最多隻需要7次便能找到答案 這就是二分查詢法,每次從中間開始猜,每次可排除一半的數量再舉個例子,假設要在包含240000個單詞的字典中查詢一個單詞,最多需要找到少步?使用二分查詢法是這樣的,最多17步 簡單查詢法呢,最多240000步一般而言,對於包含n個元素的列表中,用二分查詢法最多需要log2n步,而簡單查詢最多需要n步即二分查詢法的時間複雜度為O(logn),簡單查詢的時間複雜度為O(n),這裡的log指的是log2,大O表示法用來表示演算法快慢(下集提前預告)

二分查詢演算法python程式碼

def binary_search(list, item):
   low = 0
   high = len(list) - 1
   while low <= high:
       # //表示整除
       mid = (low + high) // 2
       guess = list[mid]
       if guess == item:
           return mid
       elif guess > item:
           high = mid - 1
       else:
           low = mid + 1
   return None

ps:二分查詢法只能用於有序列表

學會了沒?學會可以自己動手,碼一碼,用什麼都語言無所謂。參考:《演算法圖解》


文章首發於公眾號【KEN DO EVERTHING】
本公眾號專注於java相關技術,但不限於java、mysql、python、面試技巧、生活感悟等。分享優質博文,技術乾貨,學習資源等優質內容。
歡迎關注,一起學習,共成長