算法导论17章提到增加栈的multi_pop方法,一次取出若干个元素。
因为总共有n个元素,所以n个连续的操作时间复杂度为n,平均下来单次的复杂度仍为O(1).
这也比较好理解,理想情况n次操作,每次取一个,等同于pop,自然是O(1).
那么每次取2个呢,前面n/2次就取完了,后面n/2次,为空,总体仍然是O(1).
然而别忙,这里关键是必须连续取n次,反之如果连续两次取完,就不会有对应结果。实际情况下,如果有push也有pop,而且是均匀分布的,就未必可行。可见这个摊还分析也是要有前提条件的。