[英]Why is the worst-case complexity of deleting the last element in an array O(1) and not O(n)?/?
[英]Worst-case time for adding 1 element to expanding array
假設我們有一個擴展數組,當我們嘗試向其中添加某些內容但已填充時,其大小會增加一倍。
根據幻燈片“攤銷:擴展向量”的底部,添加一個元素的最壞情況是2N,不是N? 為什么是這樣?
我以為是N,因為將N個元素復制到新的雙倍大小的數組中將花費N個時間。
例如,假設我只將一個元素添加到大小為4的填充數組中。它將像這樣:
這樣就可以將元素復制5次,即N + 1,而不是2N?
將元素添加到擴展數組所需的操作是O(2N),因為首先您需要遍歷整個數組並使用O(N)檢查空白空間。 因為這是最壞的情況,所以沒有任何問題,您必須創建一個新數組,然后使用O(N)將整個內容從第一個數組復制到新數組。 這兩個操作的總和為O(2N)。
當您想到數組長度時,長度實際上是為數組保留的大小,而不是內部元素的數量。 這就是為什么如果您沒有在任何地方保存元素的數量,則需要遍歷整個數組以獲得空白。 我說的是“空空間”,因為這並不是說僅在數組中添加了元素,而沒有刪除任何元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.