欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python算法和數據結構基礎——list和dict的內置操作的時間復雜度

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

本文內容部分參考:嗶哩嗶哩網站上“自學IT工程師”的“python學習教程之數據結構和算法基礎”
具體參考鏈接:https://www.bilibili.com/video/av46256220/?p=6
            https://www.bilibili.com/video/av46256220/?p=7

根據這一系列的教程,將在系列文章中給出與C語言中的數據結構逐一對應的python解法

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

常用的參數定義為:

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

用法的簡單示例為:

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

?

測算生成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測算一小段代碼的運行速度

# 追加操作
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))

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

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

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

          
            
              .append:  0.7118582189999999
+:  114.38965233500001
[i for i in range]:  0.3101561069999974
list(range()):  0.16905038100000525
extend:  1.4377866079999961
insert : 30.547064246999994
            
          
            從以上輸出結果可以看出,字符串‘+’操作的速度最慢,在循環次數多的時間特別明顯,所以盡量避免使用;追加操作和列表生成器的速度相當,建議采納,擴展的速度稍慢,但也可以;插入操作特別是從頭部插入操作,因為后面所有的元素都要向后移動一位,所以速度最慢。
絕大部分情況下,我們更關注算法的時間復雜度。


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

List 內置操作的時間復雜度
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 內置操作的時間復雜度
operation       Big-O Effeciency
copy                O(n)
get item            O(1)
set item            O(1)
contains(in)        O(1)
iteration           O(1)
          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 三级网址日本 | 婷婷在线观看网站 | 久久免费看少妇高潮A片JA小说 | 国产成人精品午夜 | 国产三级在线视频播放线 | 久久95 | 亚洲一区欧美日韩 | 久久国产一二区 | 热@国产 | 欧美精品欧美极品欧美激情 | 一个色综合网站 | 成人国产一区二区三区 | 国产午夜精品理论片影院 | 欧美另类色图 | 免费a视频在线观看 | 国产1区2区3区| 中文字幕在线电影观看 | 免费高清av | 欧美高清在线精品一区二区不卡 | 日韩亚洲欧美一区 | 成人影院欧美大片免费看 | 免费看黄色网页 | 欧美成人精品第一区首页 | 98色花堂国产第一页 | 操欧美女 | 很黄很暴力深夜爽爽无遮挡 | 欧美一区二区三区gg高清影视 | 日本大黄视频 | 成人性视频免费网站 | 精品国精品国产自在久国产应用 | 国产在线伊人 | 91网页视频入口在线观看 | 精品亚洲一区二区三区 | 国产日韩精品一区 | 久久中文字幕久久久久91 | 日本一区二区高清不卡 | 在线播放中文字幕 | 精品一区二区三区中文字幕 | 国产成人一区二区三区 | 亚在线 | AV国産精品毛片一区二区三区 |