Python二分法搜尋演算法執行個體分析

來源:互聯網
上載者:User
本文執行個體分析了Python二分法搜尋演算法。分享給大家供大家參考。具體分析如下:

今天看書時,書上提到二分法雖然道理簡單,大家一聽就明白但是真正能一次性寫出別出錯的實現還是比較難的,即使給了你充足的時間,比如1小時。如果你不是特別認真的話,可能還是會出一些這樣那樣的錯誤,所以就嘗試了自己去實現一下,看能否一次通過,結果自然不言而喻,雖然用的時間不長,但是我失敗了,呵呵。

個人覺得失敗的最主要原因是自己沒有認真的先想好這個思路和可能出現的分支情況,而是直接憑主觀臆想就去寫代碼了,完全正中書上所說的行為,所以也如書上所說,出錯了。後經調試應該是得到了基本的正確演算法,內容如下:

#!/usr/bin/env python#encoding: utf-8def half_search(search_arr, search_str):  lb = 0  ub = len(search_arr) - 1  for i in range(ub/2 + 1):    if lb > ub:      return -1    mid = (ub + lb)/2    if search_arr[mid] == search_str:      return mid    elif search_arr[mid] > search_str:      ub = mid - 1    else:      lb = mid + 1if __name__=='__main__':  arr = [10,20,30,40,50,60,70]  print half_search(arr, 1)  print half_search(arr, 11)  print half_search(arr, 22)  print half_search(arr, 33)  print half_search(arr, 40)  print half_search(arr, 55)  print half_search(arr, 66)  print half_search(arr, 70)  print half_search(arr, 8)

結果:

-1 -1 -1 -1 3 -1 -1 6 -1

正整數代表在數組中的下標,3那就是第4個位置;-1代表不存在

總結:

實現簡單的演算法之前,如果已經有了一套最簡易的實現【比如直接列印100條相似的內容】,不妨要想想是否還有更精巧的實現【可否用迴圈+參數化替代】;實現稍微複雜點的演算法時,不妨先在紙上畫出各種可能的驗證情況,避免實現是缺胳膊短腿的;還有一點就是演算法什麼的還是要多練,不然稍微複雜的過一陣可能就會忘記細節了。我想這就叫術業有專攻吧!

希望本文所述對大家的Python程式設計有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.