聚合分析
简单来说聚合分析就是对于一个具有n个操作的问题,我们计算出其最坏情况下花费的总时间为T(n),因此在最坏情况下,每个操作的平均代价,也即摊还代价为T(n)/n;
值的注意的是,摊还代价是针对于每个操作的,并且不管每个操作是否一样,我们仍然认为其摊还代价是相等的,都为T(n)/n;
简单地举一个例子,我们将一个栈的操作进行扩充,增加一个新的操作,pop(k),它指的是将栈中元素弹出连续k个(如果栈中有这么多元素的话,否则将栈弹空为止。)那么在这种新扩充的栈中,我们如何分析各个操作的摊还代价呢?
考虑道pop(k)的最大代价为O(n)的(因为k最大为n,否则就没有意义了),而序列中可能包含O(n)个pop(k)的操作,所以最坏情况下的时间复杂度为O(n^2);
上述分析似乎是没有问题的,但是我们其实可以进一步分析,得到更好的上界,考虑到任何一个元素都只会压栈出栈一次,所以总的时间复杂度不会超过O(n),这样最坏情况下的时间复杂度实际上是O(n)的,那么每一个操作的瘫痪代价都是O(n)/n=O(1)的,值的注意的是,聚合分析中pop(k)的代价也是O(1)的,即使在最坏的情况下它可能达到O(n)。
核算法
后面再写吧,感觉用处不大!我也不太感兴趣!