簡體   English   中英

算法 - 未排序數組中刪除的時間復雜度

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

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