簡(jiǎn)介二分查找算法與相關(guān)的Python實(shí)現(xiàn)示例
二分查找Binary Search的思想:
以有序表表示靜態(tài)查找表時(shí),查找函數(shù)可以用二分查找來(lái)實(shí)現(xiàn)。
二分查找(Binary Search)的查找過(guò)程是:先確定待查記錄所在的區(qū)間,然后逐步縮小區(qū)間直到找到或找不到該記錄為止。
1二分查找的時(shí)間復(fù)雜度是O(log(n)),最壞情況下的時(shí)間復(fù)雜度是O(n)。
假設(shè) low 指向區(qū)間下界,high 指向區(qū)間上界,mid 指向區(qū)間的中間位置,則 mid = (low + high) / 2;
具體過(guò)程:
1.先將關(guān)鍵字與 mid 指向的元素比較,如果相等則返回mid。
2.關(guān)鍵字小于 mid 指向的元素關(guān)鍵字,則在 [ low, mid-1 ]區(qū)間中繼續(xù)進(jìn)行二分查找。
3.關(guān)鍵字大于mid 指向的元素關(guān)鍵字,則在[ mid +1 , high] 區(qū)間中繼續(xù)進(jìn)行二分查找。
用Python實(shí)現(xiàn)二分查找示例:
>>> def find(self, num): l = len(self) first = 0 end = l - 1 mid = 0 if l == 0: self.insert(0,num) return False while first < end: mid = (first + end)/2 if num > self[mid]: first = mid + 1 elif num < self[mid]: end = mid - 1 else: break if first == end: if self[first] > num: self.insert(first, num) return False elif self[first] < num: self.insert(first + 1, num) return False else: return True elif first > end: self.insert(first, num) return False else: return True >>> list_d = ['a','b','c','d','e','f','d','t'] >>> value_d = 't' >>> aa=find(list_d,value_d) >>> aa True >>> value_d='ha' >>> aa=find(list_d,value_d) >>> aa False
相關(guān)文章
Python機(jī)器學(xué)習(xí)應(yīng)用之工業(yè)蒸汽數(shù)據(jù)分析篇詳解
本篇文章介紹了如何用Python進(jìn)行工業(yè)蒸汽數(shù)據(jù)分析的過(guò)程及思路,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2022-01-01Python基于React-Dropzone實(shí)現(xiàn)上傳組件的示例代碼
本文主要介紹了在React-Flask框架上開(kāi)發(fā)上傳組件的技巧。文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08使用Python編寫(xiě)爬蟲(chóng)的基本模塊及框架使用指南
這篇文章主要介紹了使用Python編寫(xiě)爬蟲(chóng)的基本模塊及框架使用指南,模塊介紹包括了urllib和urllib2以及re的使用例子框架則是Scrapy的簡(jiǎn)介,需要的朋友可以參考下2016-01-01python?使用第三方庫(kù)requests-toolbelt?上傳文件流的示例
這篇文章主要介紹了python?使用第三方庫(kù)requests-toolbelt?上傳文件流,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09python使用numpy按一定格式讀取bin文件的實(shí)現(xiàn)
這篇文章主要介紹了python使用numpy按一定格式讀取bin文件的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Django REST framework 如何實(shí)現(xiàn)內(nèi)置訪問(wèn)頻率控制
這篇文章主要介紹了Django REST framework 內(nèi)置訪問(wèn)頻率控制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07