假設我將N個項目添加到Java中的ArrayList
。這最糟糕的運行時間是什麼?我知道它可能是O(N)來添加一個項目,因爲數組可能需要調整大小。它不會調整N次,因爲我添加了N個項目,甚至N個因子,因爲每次調整大小時,(AFAIK)容量都會以某個因子增加。這意味着某種日誌(N)調整大小。所以它似乎應該是O(N日誌(N))插入N項,但我不完全確定這一點。我正在看的一門舊計算機科學考試的答案爲O(N^2)。我錯過了什麼?用於向ArrayList中添加N個項目的Big-O運行時間
int newCapacity = (oldCapacity * 3)/2 + 1;
(from this answer)
如果每個調整大小都將陣列容量增加相同的數量,則O(N^2)是成本界限。也許這就是考試問題所要求的。 –
其實,我發現考試題意味着插入任何位置。這包括前面,它需要把所有東西都轉移下來。那是O(N^2)。 – sudo