平摊分析

平摊分析是一种优化算法复杂度的分析方法,通过聚合分析、记账法和势能法来确定每个操作的平均代价。聚合分析关注序列操作的总时间复杂度,记账法选择某些操作来承担所有费用,而势能法利用势能积累和消耗来分析。例如,栈操作中,通过记账法可以将插入操作设定为2的平摊代价,使得总平摊代价为O(n)。
摘要由CSDN通过智能技术生成
由来

之前的简单分析可能会对算法复杂度的上界作出过大的估计。例如,有一个空栈,连续对它进行n次操作(push,pop,连续pop),那么它的时间复杂度的上界是多少?简单的分析可以给出 O(n2) 的上界,理由如下:
最坏情况下,每次操作取三种操作中上界最大者连续pop的上界 O(n) ,那么n次操作的上界显然搜索 O(n2)
这个分析没有错,但是上界还可以进一步收缩。因为在一个栈中,pop的次数取决于栈中的元素个数,一个栈是不能一直pop下去的,如果栈有n个元素,那么pop的次数是不能超过插入的次数的,也就是:

num(push)num(pop+multipop)

也就是说,总时间约为插入次数n的两倍,这说明时间复杂度上界是 O(n) 。由此,引出了平摊分析(Amortized Analysis)的概念。

平摊分析

平摊分析是一种分析方法,其核心思想是:在进行一系列操作时,各个操作并非孤立,而是相关的。 其目的是得出每个操作的平摊代价,平摊代价一般是实际代价的上界。
CLRS上以栈操作、二进制计数器和表拓张三个例子,介绍了三种分析的方法:聚合分析(aggregate analysis),记账法(核算法,accounting method),势能法(potential method)。
其中聚合分析为基础,记账法和势能法是从不同角度出发的聚合分析。

聚合分析

简而言之,就是对数据结构依次进行n个操作 a1,a2,...an ,则在最坏情况下,这n个操作序列是时间复杂度为 T(n) ,那么每个操作的平摊代价 T(n)/n 。因此聚合分析的核心再去求出 T(n) ,然后就可以求出每个操作的平摊代价。
以栈操作为例,n个操作序列中,

T(n)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值