假设一个数组最初为空,大小为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,但我仍然坚持。任何帮助将不胜感激。
答案 0 :(得分:1)
答案有点令人失望,如果您的序列包含s
许多推送或弹出操作,那么每个操作的摊余成本为O(s)
。
要从另一个问题中挑选一句非常好的answer:
摊销分析给出了最坏情况下每项操作的平均表现(随着时间的推移)。
最糟糕的情况很明显:反复推动。在这种情况下,您的原始分析就会存在。