[英]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.