欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python真題案例之二分法查找詳解

 更新時間:2022年03月07日 16:05:21   作者:酷爾。  
這篇文章主要介紹了python實操案例練習,本文給大家分享的案例中主要講解了二分法查找,需要的小伙伴可以參考一下

寫在前面的話??

學了Python一些基礎知識之后,相信大家對Python使用方法有了一定的感悟,想要追求深層次的東西還要細細的學、慢慢的學。Python基礎教程更新到今天語法基礎算是完了,本專欄后續(xù)會對面向對象模塊更新。在進行面向對象更新之前呢會有一步小插曲就是Python 百煉成鋼系列。主要的作用呢就是使用Python刷一刷算法題,使自己的基礎更加穩(wěn)固。在更新期間收到了廣大小伙伴的喜愛,博主的知識水平也有所提升。下面呢咱們進入正題講解今天咱們要學習的二分查找法。

問題描述??

在學習一門語言的時候,咱們做的最多的一件事就是對數據進行增刪改查,而對于增刪改查操作中最常做的就是查,因為一個軟件主要的作用就是對親愛的用戶進行信息展示,只有少部分管理員或者擁有權限的用戶才可以操作數據。比如在鏈表、數組中查找東西,咱們需要從頭開始遍歷,挨個檢索。數據量龐大的時候會很令人頭疼。今天介紹的二分法查找(或稱折半查找) 主要是針對有序數列(也就是說數據要先排序)。然后每次取中值進行比較,依次折半縮小查找范圍。

原理分析??

1.實現步驟

  • 1)確定該區(qū)間的中間位置K,在數組兩邊加上區(qū)間左右邊界l,r
  • 2)將查找的值T與array[k]比較。若相等,查找成功返回此位置;否則確定新的查找區(qū)域,繼續(xù)二分查找。

區(qū)域確定如下:

  • 每一次查找與中間值比較,判斷是否查找成功,不成功當前查找區(qū)間將縮小一半。 視情況重新定左右邊界與中間索引k
  • 時間復雜度為:O(log2n)。

2.圖解

圖片源于網絡

參考代碼??

這里在寫代碼的時候對比了系統內置查找關鍵字in與二分法查找的運行效果 打印結果如下:

酷爾

由此可見Python底層的查找算法還是超級快的。使用起來也很方便

二分查找在本次實驗中輸在了需要對列表進行排序上

對于有序量大的數據就可以體現出來二分查找的優(yōu)勢了

import time,math,random

#計時器(使用的是函數裝飾器前面說函數的時候提到過)
def timeT(func):
    def wapper(*s):
        start=time.perf_counter()
        judge=func(*s)
        end=time.perf_counter()
        return judge,start-end
    return wapper
# 使用內置查找方法
@timeT
def serch1(lists,e):
    return e in lists

# 二分法
@ timeT
def serch2(lists,e):
    flag=False
    lists=sorted(lists)
    # print(lists)
    # 左游標
    lo=0
    # 右游標
    ma=len(lists)-1
    # 中間位置
    mid=len(lists)//2
    # 沒有在列表內
    if lists[ma]<e:
        return False
    if lists[lo]>e:
        return False
    # 依次縮小左右游標,直到lo>ma
    while lo<=ma:
        if lists[mid]>e:
            ma=mid
            mid=(lo+ma)//2
        elif lists[mid]<e:
            lo=mid
            mid=(lo+ma)//2
        else:
        	#標記位,True代表查到了
            flag=True
            break
    return flag


def main():
	#生成一個含有10000個元素的列表
    numarr=[x for x in range(10000)]
    #打亂列表順序
    random.shuffle(numarr)
    print(*serch1(numarr,23))
    print(*serch2(numarr,223))
    print(223 in numarr)
    # print(numarr)

if __name__=="__main__":
    main()  

到此這篇關于Python真題案例之二分法查找詳解的文章就介紹到這了,更多相關Python 二分法查找內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python項目跨域問題解決方案

    Python項目跨域問題解決方案

    這篇文章主要介紹了Python項目跨域問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python實現批量填補遙感影像的無效值NoData

    Python實現批量填補遙感影像的無效值NoData

    這篇文章主要為大家介紹了如何基于Python中ArcPy模塊,對大量柵格遙感影像文件批量進行無效值(NoData值)填充的方法,感興趣的小伙伴可以了解一下
    2023-06-06
  • Python中的默認參數實例分析

    Python中的默認參數實例分析

    這篇文章主要介紹了Python中的默認參數實例分析,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python Tornado核心及相關原理詳解

    Python Tornado核心及相關原理詳解

    這篇文章主要介紹了Python Tornado核心及相關原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • 基于python生成器封裝的協程類

    基于python生成器封裝的協程類

    這篇文章主要為大家詳細介紹了基于python生成器封裝的協程類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 簡單了解python的一些位運算技巧

    簡單了解python的一些位運算技巧

    這篇文章主要介紹了簡單了解python的一些位運算技巧,位運算的性能大家想必是清楚的,效率絕對高。相信愛好源碼的同學,在學習閱讀源碼的過程中會發(fā)現不少源碼使用了位運算,需要的朋友可以參考下
    2019-07-07
  • python的鏈表基礎知識點

    python的鏈表基礎知識點

    在本篇文章里小編給大家整理的是一篇關于python的鏈表基礎知識點內容,有興趣的朋友們可以參考學習下。
    2020-09-09
  • Python cx_freeze打包工具處理問題思路及解決辦法

    Python cx_freeze打包工具處理問題思路及解決辦法

    這篇文章主要介紹了Python cx_freeze打包工具處理問題思路及解決辦法的相關資料,需要的朋友可以參考下
    2016-02-02
  • 解決python 未發(fā)現數據源名稱并且未指定默認驅動程序的問題

    解決python 未發(fā)現數據源名稱并且未指定默認驅動程序的問題

    今天小編就為大家分享一篇解決python 未發(fā)現數據源名稱并且未指定默認驅動程序的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python超詳細實現字體反爬流程

    python超詳細實現字體反爬流程

    大家好,本篇文章主要講的是python查策網字體反爬實例,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-05-05

最新評論