繁体   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