1 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
Python 中列表的大小是動(dòng)態(tài)的。但由于動(dòng)態(tài)列表的工作方式,并非所有追加都具有相同的成本。
最初為列表分配固定空間。當(dāng)分配的空間已滿并且我們想要追加一個(gè)元素時(shí),會(huì)為列表分配一個(gè)兩倍于先前空間的新空間,并將所有列表項(xiàng)復(fù)制到新位置。因此,如果分配的空間未滿,則追加需要 O(1),但如果分配的空間已滿,則需要 O(n)(因?yàn)槲覀冃枰葟?fù)制)。
追加 n 個(gè)項(xiàng)目的成本(假設(shè)最初分配了兩個(gè)單位的空間):
(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次操作總共花費(fèi)了2n。所以平均每項(xiàng)費(fèi)用O(1)。這稱為攤余成本。
添加回答
舉報(bào)