阵列插入和删除的运行时间(Big-O)

时间:2015-04-18 23:41:12

标签: c arrays algorithm big-o

在典型的C数组中,为什么插入和删除操作的O(N)为其大O运行时间?

即。以下每个操作都有O(N)运行时间。

  • k 元素之后插入

  • N 元素之后插入

  • 删除第一个元素

  • 删除 N 元素

执行期间如何进行数组插入和删除?如果我们要在 k 位置插入一个元素,为什么执行不是简单地执行线性检索方法,直到到达 k 位置,而不是访问每个数组的元素?

1 个答案:

答案 0 :(得分:3)

获取元素是 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)中随机访问所必需的)。

为了获得更好的插入和删除保证,链接列表更合适,因为它不需要移动元素,因为连续性和随机访问不是它的属性。