使用ArrayList解释Amortized time的概念?n Array List的插入运行时间是多少(O)。

时间:2017-10-15 21:05:08

标签: algorithm data-structures

请用一个简单的问题来解释

我一直在阅读一本书,据说ArrayList在达到极限后会加倍,如果ArrayList已满,则插入N元素需要O(N)插入时间。通过采用少数ArrayList来解释元素

1 个答案:

答案 0 :(得分:1)

摊销时间用简单的术语解释:

如果你做了一百万次的手术,你就不会真正关心这种手术的最坏情况或最好的情况 - 你关心的是你重复的总时间是多少操作一百万次。

因此,如果一段时间内操作非常缓慢并不重要,只要偶尔使用一次"很少被稀释到被稀释。基本上摊销的时间意味着"每次操作的平均时间,如果你做了很多操作"。摊销时间不必保持不变;你可以有线性和对数的摊销时间或其他任何东西。

让我们来垫子'动态数组的示例,您可以重复添加新项目。通常添加项目需要恒定的时间(即O(1))。但是每次数组都满了,你会分配两倍的空间,将数据复制到新区域,并释放旧空间。假设分配和释放在恒定时间内运行,这个放大过程需要O(n)时间,其中n是数组的当前大小。

所以每次放大时,你花费的时间大约是最后一次放大的两倍。但是你在做这件事之前也等了两倍!因此,每个放大的成本可以分散到#34;在插入中。这意味着从长远来看,将m个项目添加到数组所需的总时间为O(m),因此摊销时间(即每次插入的时间)为O(1)。