<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
二分法也就是二分查詢,它是一種效率較高的查詢方法
假如公司新來了一個人,叫張三,他是你們公司第47個人,過了一段時間後,有些人呢看張三不爽,離職了,那這時候張三肯定不是公司第47個人了,怎麼樣才知道張三排第幾呢,下面我們用二分法把他找出來
思路:
給你一本1000頁的書籍,隨機給定一個頁碼,如何用最快的方式找到它?如果一頁一頁逐步去查詢,則最高需要查詢一千次!那我們如何用二分法來解決這個問題呢?二分法的關鍵就是二分這個詞。
步驟1:設定一個頁碼作為中心點來將1000頁分為兩份,中位數的作用就是每次縮小一半查詢範圍,即達到開方的效果。即可以用 (首位+末位)/2 = 中位數。
步驟2:將需要查詢的頁碼與中位數比價,如果大於中位數則捨棄對中位數的前一半查詢,反之則捨棄對後一半範圍查詢,達成開方效果。 步驟3:在新的查詢範圍重新計算出中位數
步驟4:查詢頁碼對比中位數,確定新的查詢範圍
步驟5:迴圈以上步驟,直到找到該頁碼為止
程式碼:
通過以上思路解析,我們知道了二分法實行步驟,接下來就通過程式碼來實現步驟,首先是迴圈實現
#模擬頁碼 array = [1, 3, 4, 6, 7, 8, 9, 11, 15, 17, 19, 21, 22, 25, 29, 33, 38, 69,99,107] #首位值 low = 0 #末位值 height = len(array)-1 #設定查詢頁碼 findNum = 1 #迴圈查詢 while True: #獲取中位數 mid = int((low+height)/2) #列印中位數,檢視迴圈次數 print(array[mid]) #如果中位數小於查詢值,則鎖定後半段 if array[mid] < findNum: #重置低位數 low = mid + 1 #如果中位數大於查詢值,則鎖定前半段 elif array[mid] > findNum: #重置高位值 height = mid - 1 #找到數位則列印該值下標,終止迴圈 elif array[mid]==findNum: print('find it:',array[mid],' index:',mid) break
除了上述方式外,也可以使用遞回來實現,程式碼更加簡潔
array = [1, 3, 4, 6, 7, 8, 9, 11, 15, 17, 19, 21, 22, 25, 29, 33, 38, 69,99,107] #函數遞迴 #定義一個函數,給三個形參:低位值,高位值,查詢值 def BinarySearch(low,height,findNum): #計算出中位數 middle = (low+height)//2 #如果中位數小於查詢值,則鎖定後半段 if findNum >array[middle]: #重置低位數 low = middle +1 #如果中位數大於查詢值,則鎖定前半段 elif findNum<array[middle]: #重置高位值 height = middle - 1 else: #找到該值並返回 return '該值下標為:%s,值為:%s'%(middle,array[middle]) #沒有找到則呼叫自身繼續查詢 return BinarySearch(low,height,findNum) print(BinarySearch(array[0],len(array)-1,19))
總結:
根據結果反饋,使用二分法常規Python檢索用迴圈方式找數位21,他是排在11位,中位數查詢3次,使用Python二分法檢索遞迴方式先取查詢數位的倍數,然後鎖定前半段進行索引,索引的步驟耗時更少
到此這篇關於Python語言實現二分法查詢的文章就介紹到這了,更多相關Python二分法查詢內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45