記數據結構中元素的個數為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)
