算法基础期末考点总结十七——摊还分析

摊还分析

聚合分析

n个操作的序列最坏时间复杂度如果是O(n),那么摊还代价就是O(n)/n = O(1)。两个例子:
1.栈操作
pop
push
multipop——pop多个
n个操作指的是连续的n个,所以最坏时间复杂度为O(n).
2.二进制计数器递增
n个递增操作,对每一位的操作数呈等比数列,算出来是O(n)。

核算法

提高某些操作的代价,减少某些操作的代价,使用信用体系。
1.栈操作
push的代价变成2,pop和multipop的代价变为0,这样算出的摊还代价是实际代价的上界,因为信用不为负。
2.二进制计数器递增
对每一位,置位为1的时候,除了1支出,再加上1信用,为了以后复位为0,因为置位不可能连续发生,所以信用也不为负。

势能法

把每一个数据结构映射到一个数,这个数称为势。
定义某一个操作的摊还代价为:
在这里插入图片描述
那么n个操作的摊还代价就是:
在这里插入图片描述
所以目标就是找到势函数使得:
在这里插入图片描述
常常,我们定义初始的势为0,进行操作之后势会增加,也可能减少,但不会小于0。
1.栈操作
定义栈里的元素个数为势函数,算出来结果和核算法的结果一样。
2.二进制计数器递增
定义计数器中1的个数为势函数,算出来也和核算法一样。

摊还代价和后面的Fibonacci堆有关,后面再讲。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值