分支限界法时间复杂度_数据结构时间复杂度的摊还分析(均摊法)之一:基础...

efd854c3878f5d751c4d4f55d210032d.png

摊还分析用来评价某个数据结构的一系列操作的平均代价,有时可能某个操作的代价特别高,但总体上来看也并非那么糟糕,可以形象的理解为把高代价的操作“分摊”到其他操作上去了,要求的就是均摊后的平均代价。

摊还分析有三种常用的技术:聚合分析,核算法,势能法。

1.聚合分析

利用聚合分析,我们可以证明对于任意的

equation?tex=n ,一个包含
equation?tex=n 个操作的序列花费的总时间为
equation?tex=T%28n%29 。因此,在最坏情况下,每个操作的平均代价,或称为摊还代价为
equation?tex=T%28n%29%2Fn ,即每个操作的时间复杂度为
equation?tex=O%281%29

下面讲两个简单的例子来说明。

  • 栈操作

考虑一个空栈

equation?tex=S ,有三种操作:
PUSH(S,x):将对象x压入栈S中。  
POP(S):将栈S的栈顶对象弹出,并返回该对象。对空栈调用POP会产生一个错误。 
MULTIPOP(S,k):循环调用POP(S),弹出栈顶的k个元素(k<n,n为栈的最大容量)。

其中,第三种操作的伪代码如下:

MULTIPOP(S,k)
    while not STACK-EMPTY(S) and k>0
        POP(S)
        k=k-1

那么,现在需要分析:执行n次栈操作最坏情况下的时间复杂度是多少?

分析:

单独看三个操作,前两个都是

equation?tex=O%281%29 的,第三个是
equation?tex=O%28n%29 的。这样直观的看,最坏情况下,执行
equation?tex=n 次操作的代价是
equation?tex=O%28n%5E2%29 ,但这实际上是一个松的上界。因为要想达到这个上界,就要尽量多执行第三个操作,但是栈为空以后,第三个操作就什么都不干了。

我们需要对这三个操作整体分析。显然,对于一个非空的栈,可以执行的

equation?tex=POP 操作的个数(包括后两个操作的所有POP)与执行了
equation?tex=PUSH 操作的个数相当,即最多
equation?tex=n

因此,

equation?tex=n 次操作最坏情况下执行的时间复杂度为
equation?tex=O%28n%29 ,平均每次操作的代价是
equation?tex=O%281%29

在聚合分析中,我们将每个操作的摊还代价设定为平均代价,故三种操作的摊还代价都是

equation?tex=O%281%29
  • 二进制计数器递增

考虑一个

equation?tex=k 位二进制计数器,其初值为0,用一个数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值