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