第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Python實(shí)現(xiàn)二分法

標(biāo)簽:
Python

Python实现二分查找

为什么需要二分查找

  1. 如果查找1-100内任意一个数字?

    1. 顺序查找(简单查找)

      从1开始或者100倒着来进行查找

      最快只需要一次,但是最慢则需要一百次,差距相当大

      大O表示法为 O(n)

    2. 二分查找

      每次从中间进行查找,先从50,再判断大还是小,再从75或者25进行查找,依次类推

      由于每次都会排除一般的数字,所以最慢也只需要7次,log2 n次

      大O表示法为O(log n)

      要求:必须是有序的情况

  2. 从上面的例子可以看出来,在有序的情况下,二分查找的效率是很高的

大O表示法

大O表示法是一种比较特殊的表示法,指出了算法的消耗时间速度,主要可以表示两种算法之间时间消耗的不同增速

小明要准备去北京玩,为了更好的准备,小明提前准备了100套线路方案,然后准备用程序验证那种方案更加方便省时间,如果使用简单查找的话进行验证,假设一套方案需要一秒钟,那么100套就需要100毫秒(O(n),而使用二分查找的话只需要7毫秒(O(log n),这就整整差了十多倍的时间,这仅仅只是100套,如果是一亿套方案呢,简单查找时间就会更久, 由此我们可以根据大O表示法比较两个算法直接的时间增量速度以此判断哪个算法更加便捷

python代码实现二分查找

def BinarySearch(list1, num):

    min = 0               # 最小的下标
    max = len(list1) - 1  # 最大的下标
    i = 0
    while True:
        i += 1
        mid = (max + min) // 2 # 中间的下标每次向下取整
        if num > list1[mid] :
            min = mid + 1  # 小于需要的猜的数,则将最小下标变为中间的,又因为中间的已经猜过,所以要加1
        elif num == list1[mid] :
            print("找到数据")
            print("一共查找%d次"%i)            break
        else :
            max = mid - 1  # 大于需要的猜的数,则将最大下标变为中间的,又因为中间的已经猜过,所以要减1
        if __name__ == "__main__":
    
    list1 = [i for i in range(0,100)]
    num = 5
    BinarySearch(list1, num)



作者:python_LiuYi
链接:https://www.jianshu.com/p/af69c01375ce


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消