日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【算法图解】 之 [二分查找法] 详解

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【算法图解】 之 [二分查找法] 详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

入門算法學習,看的第一本是深入淺出的《算法圖解》一書,本博客是對《算法圖解》一書的學習筆記,將書中的分享的算法示例用Python3語言實現。
如果你也想要閱讀這本書,百度云盤鏈接:https://pan.baidu.com/s/1s967vfgEBd1vSrfwVI9Y3g 提取碼:【be9k】
或者也可以留言你的郵箱,我將PDF共享給你~

二分查找

  • 二分查找是一種算法,其輸入是一個有序的元素列表(必須有序),如果要查找的元素包含在列表中,二分查找返回其位置;否則返回null。

二分查找工作原理

大家一定玩過‘猜數’這個游戲,就是我隨便想一個1~100的數字。

你的目標是以最少的次數猜到這個數字。你每次猜測后,我會說小了、大了或對了。
假設你從1開始依次往上猜,猜測過程會是這樣。

這是簡單查找,更準確的說法是傻找。每次猜測都只能排除一個數字。如果我想的數字是99,
你得猜99次才能猜到!

最佳的查找方法是:


這就是二分查找,你學習了第一種算法!每次猜測排除的數字個數如下。

所以,不管我心里想的是哪個數字,你在7次之內都能猜到,因為每次
猜測都將排除很多數字!

僅當列表有序的時候,二分查找才管用!!

二分查找–案例

案例:函數binary_search接收一個"有序數組"和"一個元素"。
如果,指定的元素包含在數組中,這個函數將返回其位置。

def binary_search(list, num): low = 0 # 最小索引high = len(list) - 1 # 最大索引while low <= high:mid = int((low + high) / 2) # 向0取整,中間值的索引guess = list[mid] # 猜中間值if guess == num: # 找到了元素return ('got %d in index of %d') % (num, mid)if guess < num: # 猜小了,增加最小索引low = mid + 1else:high = mid - 1 # 猜大了,縮小最大索引return Nonemy_list = [1,3,5,7,9] find_num = 3 print(binary_search(my_list,find_num)) find_num1 = 4 print(binary_search(my_list,find_num1))---------------------------- got 3 in index of 1 None

運行時間

簡單查找逐個地檢查數字,如果列表包含100個數字,最多需要猜100次。如果列表包含40億個數字,最
多需要猜40億次。換言之,最多需要猜測的次數與列表長度相同,這被稱為線性時間(linear time)。

二分查找則不同。如果列表包含100個元素,最多要猜7次;如果列表包含40億個數字,最多
需猜32次。厲害吧?二分查找的運行時間為對數時間(或log時間)。

總結

以上是生活随笔為你收集整理的【算法图解】 之 [二分查找法] 详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。