gpt4 book ai didi

java - 为什么 ArrayList add() 和 add(int index, E) 复杂度是摊销常数时间?为什么 add() 不是 O(1),add(int index, E) 不是 O(n)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:35:26 27 4
gpt4 key购买 nike

<分区>

为什么 ArrayList add() 和 add(int index, E) 的复杂度是摊销常数时间?

为什么单个 add() 操作不为 O(1),单个 add(int index, E) 操作为 O(n),使用任一(任意)add 添加 n 个元素(n 个添加操作)为 O(n)方法?假设我们很少使用 add(int index, E) 添加到数组末尾?

数组(和 ArrayList)的一个操作复杂度是否已经有 n 个元素:

  1. 添加() - O(1)?
  2. 添加(整数索引,E)-O(n)?

如果我们进行一百万次插入,1 和 2 的平均值不可能是 O(1),对吗?

甲骨文为什么说

The add operation runs in amortized constant time, that is, adding n elements requires O(n) time.

我认为 add() 的复杂度为 O(1),add(int index, E) 的复杂度为 O(n)。

这是否意味着“n 个操作的整体复杂度”(复杂度为 O(1) 的每个操作)可以这么说 n*O(1) = O(n)。我错过了什么?

也许对于 Oracle,“添加操作”总是意味着只有 add()?而add(int, E)是“插入操作”?然后完全清楚!

我有一个猜测,这与渐近分析摊销分析之间的区别有关,但我无法理解到底。

What is amortized analysis of algorithms?

Why the time complexity of an array insertion is O(n) and not O(n+1)?

More appropriate to say Amortized O(1) vs O(n) for insertion into unsorted dynamic array? (不太清楚)

Big O when adding together different routines

27 4 0