簡體   English   中英

在擴展數組中添加1個元素的最壞情況

[英]Worst-case time for adding 1 element to expanding array

假設我們有一個擴展數組,當我們嘗試向其中添加某些內容但已填充時,其大小會增加一倍。

根據幻燈片“攤銷:擴展向量”的底部,添加一個元素的最壞情況是2N,不是N? 為什么是這樣?

我以為是N,因為將N個元素復制到新的雙倍大小的數組中將花費N個時間。

例如,假設我只將一個元素添加到大小為4的填充數組中。它將像這樣:

  1. 制作大小為8(4的兩倍)的新數組。
  2. 將原始數組的所有元素復制到新數組(復制4次)。
  3. 將新數組的第5個元素設置為其他元素(復制1次)。

這樣就可以將元素復制5次,即N + 1,而不是2N?

將元素添加到擴展數組所需的操作是O(2N),因為首先您需要遍歷整個數組並使用O(N)檢查空白空間。 因為這是最壞的情況,所以沒有任何問題,您必須創建一個新數組,然后使用O(N)將整個內容從第一個數組復制到新數組。 這兩個操作的總和為O(2N)。

當您想到數組長度時,長度實際上是為數組保留的大小,而不是內部元素的數量。 這就是為什么如果您沒有在任何地方保存元素的數量,則需要遍歷整個數組以獲得空白。 我說的是“空空間”,因為這並不是說僅在數組中添加了元素,而沒有刪除任何元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM