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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM