为什么ArrayList add()和add(int index,E)复杂性是摊销常数时间?为什么不是 O(1) 代表 add(),O(n) 代表 add(int index, E)?
为什么ArrayList add()和add(int index,E)复杂性是摊销常数时间?
为什么不是 O(1) 用于单个 add() 操作,O(n) 用于单个 add(int 索引,E) 操作,O(n) 用于使用任一(任意)添加方法添加 n 个元素(n 个 add 操作)?假设我们使用add(int index,E)很少添加到数组结尾?
数组(和 ArrayList)的一个操作复杂性不是已经有 n 个元素了吗:
- add() - O(1)?
- add(int index, E) - O(n)?
如果我们进行一百万次插入,则1和2的平均值不可能是O(1),对吧?
为什么甲骨文说
添加操作在摊销常量时间内运行,即添加 n 个元素需要 O(n) 时间。
我认为 add() 的复杂度是 O(1)和 add(int index, E) 的 O(n)。
这是否意味着“n个运算的积分复杂度”(每个运算的复杂度O(1))可以说是n*O(1) = O(n)。我错过了什么?
也许对于Oracle来说,“add操作”总是意味着只有add()?而 add(int, E) 是“插入操作”吗?然后完全清除!
我有一个猜测,它与渐近分析和摊销分析之间的差异有关,但我无法掌握它到最后。
为什么数组插入的时间复杂度是 O(n) 而不是 O(n+1)?