【发布时间】:2015-04-18 23:41:11
【问题描述】:
在一个典型的C数组中,为什么插入和删除操作的big-O运行时间都是O(N)?
即以下每个操作都有 O(N) 的运行时间。
在第 k 个元素之后插入
在第 N 个元素之后插入
删除第一个元素
删除第 N 个元素
数组的插入和删除在执行过程中是如何发生的?如果我们要在第 k 个位置插入一个元素,为什么执行不简单地执行一个线性检索方法,直到到达第 k 个位置,而不是访问每个数组的元素?
【问题讨论】:
-
如果您可以使用额外的变量来跟踪数组大小和循环索引值,使得数组是一个“循环列表”,那么头部和尾部的插入/删除可以变成 O( 1)。否则,一切都必须像 Anirudh 解释的那样以 O(N) 的速率发生变化。