【发布时间】:2015-07-20 12:47:32
【问题描述】:
假设我在 Java 中将 N 个项目添加到 ArrayList。最坏情况下的运行时间是多少?我知道添加单个项目可能是 O(N),因为数组可能需要调整大小。当我添加 N 个项目甚至 N 倍时,它不会调整 N 倍的大小,因为(AFAIK)ArrayList 每次调整大小时都会增加一些容量。这意味着某种 log(N) 数量的调整大小。因此,插入 N 个项目似乎应该是 O(N log(N)),但我对此并不完全确定。我正在查看的旧计算机科学考试的答案为 O(N^2)。我错过了什么吗?
int newCapacity = (oldCapacity * 3)/2 + 1; (from this answer)
【问题讨论】:
-
O(N^2) 是如果每次调整大小使阵列容量增加相同数量的成本界限。也许这就是考试问题所要问的。
-
其实我发现试题的意思是插入到任何位置。这包括前面,它需要把所有东西都往下移。那是 O(N^2)。