Python二分法搜索算法實(shí)例分析
本文實(shí)例分析了Python二分法搜索算法。分享給大家供大家參考。具體分析如下:
今天看書時(shí),書上提到二分法雖然道理簡(jiǎn)單,大家一聽就明白但是真正能一次性寫出別出錯(cuò)的實(shí)現(xiàn)還是比較難的,即使給了你充足的時(shí)間,比如1小時(shí)。如果你不是特別認(rèn)真的話,可能還是會(huì)出一些這樣那樣的錯(cuò)誤,所以就嘗試了自己去實(shí)現(xiàn)一下,看能否一次通過,結(jié)果自然不言而喻,雖然用的時(shí)間不長(zhǎng),但是我失敗了,呵呵。
個(gè)人覺得失敗的最主要原因是自己沒有認(rèn)真的先想好這個(gè)思路和可能出現(xiàn)的分支情況,而是直接憑主觀臆想就去寫代碼了,完全正中書上所說的行為,所以也如書上所說,出錯(cuò)了。后經(jīng)調(diào)試應(yīng)該是得到了基本的正確算法,內(nèi)容如下:
#!/usr/bin/env python #encoding: utf-8 def 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 + 1 if __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)
結(jié)果:
-1 -1 -1 -1 3 -1 -1 6 -1
正整數(shù)代表在數(shù)組中的下標(biāo),3那就是第4個(gè)位置;-1代表不存在
總結(jié):
實(shí)現(xiàn)簡(jiǎn)單的算法之前,如果已經(jīng)有了一套最簡(jiǎn)易的實(shí)現(xiàn)【比如直接打印100條相似的內(nèi)容】,不妨要想想是否還有更精巧的實(shí)現(xiàn)【可否用循環(huán)+參數(shù)化替代】;實(shí)現(xiàn)稍微復(fù)雜點(diǎn)的算法時(shí),不妨先在紙上畫出各種可能的驗(yàn)證情況,避免實(shí)現(xiàn)是缺胳膊短腿的;還有一點(diǎn)就是算法什么的還是要多練,不然稍微復(fù)雜的過一陣可能就會(huì)忘記細(xì)節(jié)了。我想這就叫術(shù)業(yè)有專攻吧!
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python格式化輸出%s與format()的用法對(duì)比
這篇文章主要為大家介紹了python格式化輸出%s與format()的用法對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10python中Matplotlib繪制直線的實(shí)例代碼
在本篇文章里小編給大家整理的是一篇關(guān)于python中Matplotlib繪制直線的實(shí)例代碼內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。2021-07-07Python OpenCV對(duì)圖像進(jìn)行模糊處理詳解流程
OpenCV是一個(gè)基于BSD許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級(jí)而且高效——由一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語(yǔ)言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面很多通用算法2021-10-10Python實(shí)現(xiàn)RLE格式與PNG格式互轉(zhuǎn)
在機(jī)器視覺領(lǐng)域的深度學(xué)習(xí)中,很多數(shù)據(jù)集的標(biāo)注文件使用RLE的格式。但是神經(jīng)網(wǎng)絡(luò)的輸入一定是一張圖片,為此必須把RLE格式的文件轉(zhuǎn)變?yōu)閳D像格式。本文將利用Python實(shí)現(xiàn)RLE格式與PNG格式互轉(zhuǎn),感興趣的可以了解一下2022-08-08django在接受post請(qǐng)求時(shí)顯示403forbidden實(shí)例解析
這篇文章主要介紹了django在接受post請(qǐng)求時(shí)顯示403forbidden實(shí)例解析,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01python使用pip安裝模塊出現(xiàn)ReadTimeoutError: HTTPSConnectionPool的解決方法
這篇文章主要介紹了python使用pip安裝模塊出現(xiàn)ReadTimeoutError: HTTPSConnectionPool的解決方法,需要的朋友可以參考下2019-10-10python?kornia計(jì)算機(jī)視覺庫(kù)實(shí)現(xiàn)圖像變化
這篇文章主要為大家介紹了python?kornia計(jì)算機(jī)視覺庫(kù)實(shí)現(xiàn)圖像變化算法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01