簡體   English   中英

陣列插入和刪除的運行時間(Big-O)

[英]Running Time (Big-O) of Array Insertion and Deletion

在典型的C陣列中,為什么插入和刪除操作將O(N)作為其大O運行時間?

即,以下每個操作都有O(N)運行時間。

  • 插入第k個元素后

  • 插入第N個元素后

  • 刪除第一個元素

  • 刪除第N個元素

如何在執行期間進行數組插入和刪除? 如果我們要在第k個位置插入一個元素,為什么執行不是簡單地執行線性檢索方法,直到到達第k個位置,而不是訪問數組的每個元素?

獲取元素是O(1),因為您確實具有隨機訪問權限,但在此之后,創建要插入的空間(或在刪除時壓縮)需要O(N)時間。

插入:

[1,2,4,5,6]
---^ insert after this, need to move everything one step to the right.

[1,2,_,4,5,6]
-----^ insert at this location

[1,2,6,4,5,6]

刪除:

[1,2,4,5,6]
---^ delete this

[1,_,4,5,6]
---^ compact to remove this "hole"

[1,4,5,6]

原因是你必須保持所有元素都存儲在連續位置的不變量(在O(1)中隨機訪問所必需的)。

為了獲得更好的插入和刪除保證,鏈表更合適,因為它不需要移位元素,因為連續性和隨機訪問不是它的屬性。

暫無
暫無

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

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