天天看點

python基礎結構的時間複雜度

記資料結構中元素的個數為n

清單(List)

清單由array實作,配置設定的記憶體是一塊連續空間。調取、修改清單元素,傳回清單長度,這些操作的時間複雜度都是O(1).而在清單頭部進行的操作時間複雜度就比較高,為O(n)。

例如,在個人本地環境中,分别從清單的尾部和頭部添加10萬個元素,前者花了10ms,後者花了2100ms。為應對此種問題,特别可以采用collections.deque。這種雙端隊列由雙向連結清單實作,在左右兩段删除、插入元素的時間複雜度都是O(1)

字典(dict)

字典基本實作是用hash函數映射。擷取、删除、添加元素的時間複雜度是O(1),in操作的時間複雜度一般為O(1),隻有在哈希函數設定不合理,發生大量鍵值映射碰撞時才會出現O(n)的時間複雜度,而這種情況是很少的。

字元串(string)

python中的字元串是不可變類型,定義好一個字元串後,它在記憶體中占用的空間是給定的。

當我們使用char0 in string0這樣的語句時,時間複雜度大于O(1),可能為O(n).

另外需要注意的是,string1 = string1 + 'a'這樣的文法對應時間複雜度并不是O(1),因為可能需要将string1全部複制到記憶體中,在把‘a’添加在尾部,形成新的字元串。如果需要依次将多個字元組合成字元串,可用join()操作,如圖:

alist = ['a', 'b', 'c']
tmp = ''.join(alist)      

結果為'abc'。join會先統計alist的長度,預先配置設定好空間,是以join()的時間複雜度為O(n)