假设我将N个项目添加到Java中的ArrayList
。这最糟糕的运行时间是什么?我知道它可能是O(N)来添加一个项目,因为数组可能需要调整大小。它不会调整N次,因为我添加了N个项目,甚至N个因子,因为每次调整大小时,(AFAIK)容量都会以某个因子增加。这意味着某种日志(N)调整大小。所以它似乎应该是O(N日志(N))插入N项,但我不完全确定这一点。我正在看的一门旧计算机科学考试的答案为O(N^2)。我错过了什么?用于向ArrayList中添加N个项目的Big-O运行时间
int newCapacity = (oldCapacity * 3)/2 + 1;
(from this answer)
如果每个调整大小都将阵列容量增加相同的数量,则O(N^2)是成本界限。也许这就是考试问题所要求的。 –
其实,我发现考试题意味着插入任何位置。这包括前面,它需要把所有东西都转移下来。那是O(N^2)。 – sudo