[英]Algorithm - the time complexity of deletion in a unsorted array
假設有一個未排序的數組A,它包含一個元素x(x是元素的指針),每個元素都有一個附屬變量k。 因此,我們可以得到以下時間復雜度(對於最壞的情況):
如果我們想搜索一個特定的 K,那么它的成本是 O(n)。
如果我們想插入一個元素,那么它的成本是 O(1),因為 A 只是將元素添加到最后。
如果我們知道 x,那么從數組 A 中刪除它會怎樣?
我們必須先搜索xk 並獲得 x 的索引,然后通過它在 A 中的索引刪除x,對嗎?
所以對於Delete ,它的成本也是 O(n) ,對吧?
謝謝
查找具有給定值的元素是線性的。
由於數組未進行排序,因此您可以在固定時間內進行刪除。 首先將要刪除的元素交換到數組的末尾,然后將數組大小減少一個元素。
是的,這是正確的。 此外,如果它是一個數組,單獨刪除將花費O(n)
時間,因為刪除元素后,您需要將該元素右側的所有元素移到左側一個位置。 因此,即使您知道x(例如,您只會刪除第一個元素),也需要O(n)
時間。
排序數組中刪除操作的最壞情況時間復雜度為O(n) ,如果數組未排序,並且提到刪除操作后不應更改數組的順序,則時間復雜度將與O(n)相同)否則它將是O(1) 。
未排序數組
前任:
Items Value [3, 5, 1, 7, 4]
Items Address [&1, &2, &3, &4, &5]
Deleting - Value 5
1. 刪除 - 保留順序- O(n + n) - O(2n) ~> O(n)
i) O(n) - 查找該元素的位置(值 5 時索引 = 1)
ii) O(n) - 刪除該元素后,其余的項目 (1, 7, 4) 需要重新排列以保存前一項的地址。 喜歡
Items Value [3, 1, 7, 4]
Items Address [&1, &2, &3, &4]
2. 刪除 - 不保留順序- O(n + 1 + 1) - O(2 + n) ~> O(n)
i) O(n) - 查找該元素的位置(值 5 時索引 = 1)
ii) O(1) - 與數組的最后一個元素交換。
Items Value [3, 4, 1, 7, 5]
Items Address [&1, &2, &3, &4, &5]
iii) O(1) - 刪除數組的最后一個元素。
Items Value [3, 4, 1, 7]
Items Address [&1, &2, &3, &4]
是。 找到要刪除的元素需要花費O(n)
時間。 然后,為了刪除它,您必須將所有元素向左移動一個空格。 這也是O(n)
因此總復雜度是線性的。
此外,如果您正在討論靜態分配的數組,insert也需要O(n)
。 您必須調整數組的大小才能容納額外的元素。 有一些方法可以將這個運行時間分攤到O(1)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.