Big-O运行时将N个项添加到ArrayList中

时间:2015-05-09 18:26:00

标签: java arraylist big-o

说我在Java中将N个项添加到ArrayList。最坏情况下的运行时间是多少?我知道添加单个项目可能是O(N),因为数组可能需要调整大小。当我添加N个项目甚至是因子N时,它不会调整N次,因为(AFAIK)每次调整大小时ArrayList的容量会增加一些因素。这意味着某种log(N)数量的调整大小。所以看起来应该是O(N log(N))来插入N个项目,但我对此并不完全确定。我看过的旧计算机科学考试的答案为O(N ^ 2)。我错过了什么吗?

int newCapacity = (oldCapacity * 3)/2 + 1;from this answer

1 个答案:

答案 0 :(得分:5)

dynamic array在计算机科学中通过摊销时间分析进行了充分研究。简短的回答是,当从空动态数组开始并添加 N 元素时,总时间为 O N )。

如果必须执行调整大小,那么添加单个项目的最坏情况时间为 O N ),并且 O < / em>(log N )调整大小。

但是当我们添加这些调整大小操作时,总数只有 O N ),这非常好。下面是一个示例,说明缩放因子为2时(而不是ArrayList的缩放因子为3/2):

N = 64:调整大小为1,2,4,8,16,32,64。总操作= 127(大约2 N )。