【從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、面試技巧、生活感悟等。分享優質博文,技術乾貨,學習資源等優質內容。
歡迎關注,一起學習,共成長