具有线性级数的动态阵列的摊销复杂性?

时间:2014-10-27 03:01:17

标签: arrays algorithm data-structures time-complexity dynamic-arrays

假设一个数组最初为空,大小为5,每次填充所有插槽时它都会扩展为5。

据我所知,如果我们只考虑 n append()操作的任何序列,则摊销成本将为O(n),因为总成本为:

5+(5+1*5)+(5+2*5)+...+(5+(floor(n/5)-1)*5) = O(n^2). 

*其中floor(n / 5)是数组扩展的数量。

但是,如果它的 n个操作的任何序列都包含pop()呢?假设pop()不会改变数组大小。

我的方式显然不起作用,我已经阅读了CLRS,但我仍然坚持。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

答案有点令人失望,如果您的序列包含s许多推送或弹出操作,那么每个操作的摊余成本为O(s)

要从另一个问题中挑选一句非常好的answer

  

摊销分析给出了最坏情况下每项操作的平均表现(随着时间的推移)。

最糟糕的情况很明显:反复推动。在这种情况下,您的原始分析就会存在。