算法导论之平摊分析(动态表)

平摊分析,amortizedanalysis,对数据结构执行的所有操作的总和时间是油由求平均而得出,用来证明一系列操作中,通过对所有操作求平均代价,即时某一操作具有较大代价,但平均代价还是小的。导论中这个和平均情况分析不同,我自己到没感觉出不同,同样是求平均。Amortized,摊销之意,就是将把总代价平均到一个周期内来承担。

平摊分析有什么意义呢?主要为认识数据结构。对数据结构的一系列操作,数据结构并非总是静态的,每一个操作都可能引发数据结构的改变,而影响下一步操作的执行代价,用总体来刻画,可以为我们选择怎样的数据结构以及如何对数据结构执行操作提供性能上的量化判断。

平摊分析有三种方法:聚集分析、记账法、势能法。

聚集分析,证明对所有的n个操作所构成的序列的总时间在最坏情况下为T(n)。在最坏情况下,每个操作的平均代价就是T(n)/n。总体最坏,平均下去就是每个操作的最坏情况。

记账法,则是通过对操作赋予价值,价值储蓄用于后续支出。如果一个操作的代价小于平摊代价,就是时间花费小,那么可以储蓄起来,用于给那些代价大于平摊代价的操作。只要确保总储蓄最后大于等于零,那么平摊就成立。

势能方法,思路和记账法一样,对数据结构的每一个操作用能或势来表示,也就是先存起能量,支付后面需要消耗能量的操作。需要定义一个势函数。

通过二进制计数器累进来说明这三类方法。K位二进制计数器,用A[0..k-1]表示,位数长度为k,最低位在A[0],最高位在A[k-1]中。计数器加1的函数如下:

Fun_Increment(A){

    i=0;

    while i<length(A) and A[i]=1

        do A[i]=0;//该位是1,加1就累进一位

           i=i+1;

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值