1 回答

TA貢獻1788條經驗 獲得超4個贊
Python 中列表的大小是動態的。但由于動態列表的工作方式,并非所有追加都具有相同的成本。
最初為列表分配固定空間。當分配的空間已滿并且我們想要追加一個元素時,會為列表分配一個兩倍于先前空間的新空間,并將所有列表項復制到新位置。因此,如果分配的空間未滿,則追加需要 O(1),但如果分配的空間已滿,則需要 O(n)(因為我們需要先復制)。
追加 n 個項目的成本(假設最初分配了兩個單位的空間):
(1) + (1) # costs of appending the first two items
+ (2+1) + (1) # costs of appending the next two items
+ (4+1) + (1) + (1) + (1) # costs of appending the next four items
+ (8+1) + (1) + (1) + (1) + (1) + (1) + (1) + (1) # costs of appending the next eight items
+ (16+1) + (1) + (1) + (1) + (1) + (1) + (1) + (1) + (1) + (1) + (1) + (1) + (1) + (1) + (1) + (1)
+ (32+1) + ...
...
這2 + 4 + 8 + 16 + ... + n大約等于 2n。所以nappend次操作總共花費了2n。所以平均每項費用O(1)。這稱為攤余成本。
添加回答
舉報