日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python算法和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)——list和dict的內(nèi)置操作的時(shí)間復(fù)雜度

系統(tǒng) 1853 0
            我們已知python是具有非常多的包一種開源語(yǔ)言,封裝了各種算法。
python典型的數(shù)據(jù)結(jié)構(gòu)為列表/元組/字符串/字典,與C/C++中的數(shù)組(array)/ 棧(stack) /(優(yōu)先)隊(duì)列”(queue) / 二叉樹(binary tree)有明顯區(qū)別。
在python官網(wǎng)中指出,列表可以作為棧和隊(duì)列使用,但是并未給出特別詳細(xì)具體的教程。
在python官網(wǎng)上有關(guān)于list和dict數(shù)據(jù)結(jié)構(gòu)的描述參考,如鏈接所示,但是沒有關(guān)于時(shí)間復(fù)雜度和空間復(fù)雜度的分析。本文是對(duì)官網(wǎng)內(nèi)容一個(gè)實(shí)例化和補(bǔ)充
官網(wǎng)鏈接:https://docs.python.org/zh-cn/3/tutorial/datastructures.html

本文內(nèi)容部分參考:?jiǎn)袅▎袅ňW(wǎng)站上“自學(xué)IT工程師”的“python學(xué)習(xí)教程之?dāng)?shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ)”
具體參考鏈接:https://www.bilibili.com/video/av46256220/?p=6
            https://www.bilibili.com/video/av46256220/?p=7

根據(jù)這一系列的教程,將在系列文章中給出與C語(yǔ)言中的數(shù)據(jù)結(jié)構(gòu)逐一對(duì)應(yīng)的python解法

測(cè)算一小段代碼的執(zhí)行速度采用timeit這個(gè)包,timeit用法參考:https://docs.python.org/3/library/timeit.html
          

常用的參數(shù)定義為:

            
              class timeit.Timer(stmt ='pass',setup ='pass',timer = 
              
                ,globals = None )
              
            
          

用法的簡(jiǎn)單示例為:

            
              timeit.Timer('for i in range(10): oct(i)', 'gc.enable()').timeit()
            
          

?

測(cè)算生成list的算法效率

            
              from timeit import Timer

def t1():
    li = []
    for i in range(10000):
        li.append(i)

def t2():
    li = []
    for i in range(10000):
        li = li+ [i]

def t3():
    li = [i for i in range(10000)]

def t4():
    li = list(range(10000))

def t5():
    for i in range(10000):
        li.extend([i])

def t6():
    li = []
    for i in range(10000):
        li.insert(0,i)

# 采用timeit測(cè)算一小段代碼的運(yùn)行速度

# 追加操作
timer1 = Timer('t1()','from __main__ import t1')
print('.append: ',timer1.timeit(1000))

# 加操作操作
timer2 = Timer('t2()','from __main__ import t2')
print('+: ',timer2.timeit(1000))

#列表生成器
timer3 = Timer('t3()','from __main__ import t3')
print('[i for i in range]: ',timer3.timeit(1000))

# 列表生成器類似的轉(zhuǎn)換
timer4 = Timer('t4()','from __main__ import t4')
print('list(range()): ',timer4.timeit(1000))

# 擴(kuò)展操作
timer5 = Timer('t5()','from __main__ import t5')
print('extend: ',timer5.timeit(1000))

#插入操作
timer6 = Timer('t6()','from __main__ import t6')
print('insert :',timer6.timeit(1000))
            
          
            輸出結(jié)果為

          
            
              .append:  0.7118582189999999
+:  114.38965233500001
[i for i in range]:  0.3101561069999974
list(range()):  0.16905038100000525
extend:  1.4377866079999961
insert : 30.547064246999994
            
          
            從以上輸出結(jié)果可以看出,字符串‘+’操作的速度最慢,在循環(huán)次數(shù)多的時(shí)間特別明顯,所以盡量避免使用;追加操作和列表生成器的速度相當(dāng),建議采納,擴(kuò)展的速度稍慢,但也可以;插入操作特別是從頭部插入操作,因?yàn)楹竺嫠械脑囟家蚝笠苿?dòng)一位,所以速度最慢。
絕大部分情況下,我們更關(guān)注算法的時(shí)間復(fù)雜度。


除了以上引用到的列表(list)的方法以外,list和dict還有很多內(nèi)置操作,他們的時(shí)間復(fù)雜度如下所示。

List 內(nèi)置操作的時(shí)間復(fù)雜度
Operation         Big-O Efficiency
index[]             O(1)
index assignment    O(1)
append              O(1)
pop()               O(1)
pop(i)              O(n)
insert()            O(n)
del operator        O(n)
iteration           O(n)
contains(in)        O(n)
get slice           O(n)
set slice           O(n+k)
reversed            O(n)
concatenate         O(n)
sort                O(nlogn)
multiply            O(nk)

dict 內(nèi)置操作的時(shí)間復(fù)雜度
operation       Big-O Effeciency
copy                O(n)
get item            O(1)
set item            O(1)
contains(in)        O(1)
iteration           O(1)
          

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 同心县| 子长县| 潮州市| 三明市| 通辽市| 邛崃市| 广州市| 开江县| 富锦市| 偏关县| 通江县| 棋牌| 湾仔区| 平南县| 故城县| 会理县| 繁昌县| 六安市| 辽宁省| 临邑县| 漯河市| 武城县| 逊克县| 余庆县| 松原市| 乌什县| 鱼台县| 平山县| 米易县| 朝阳区| 新沂市| 开鲁县| 泸定县| 法库县| 龙泉市| 永新县| 平舆县| 镇平县| 成武县| 桂阳县| 进贤县|