算法导论中求解时间复杂度的三种方法

这一章讲的是递归式(recurrence),递归式是一组等式或不等式,它所描述的函数是用在更小的输入下该函数的值来定义的。

本章讲了三种方法来解递归式,分别是代换法,递归树方法,主方法。

1.代换法(Substitution method)(P38~P40)

定义:即在归纳假设时,用所猜测的值去代替函数的解。

用途:确定一个递归式的上界或下界。

缺点:只能用于解的形式很容易猜的情形。

总结:这种方法需要经验的积累,可以通过转换为先前见过的类似递归式来求解。

2.递归树方法(Recursion-tree method)

起因:代换法有时很难得到一个正确的好的猜测值。

用途:画出一个递归树是一种得到好猜测的直接方法。

分析(重点):在递归树中,每一个结点都代表递归函数调用集合中一个子问题的代价。将递归树中每一层内的代价相加得到一个每层代价的集合,再将每层的代价相加得到递归式所有层次的总代价。

总结:递归树最适合用来产生好的猜测,然后用代换法加以验证。

递归树扩展过程:①.第二章2.3.2节分析分治法时图2-5(P21~P22)的构造递归树过程;②.第四章P41图4-1的递归树构造过程;这两个图需要好好分析。

3.主方法(Master method)

优点:针对形如T(n) = aT(n/b) + f(n)的递归式

缺点:并不能解所有形如上式的递归式的解。

具体分析:

T(n) = aT(n/b) + f(n)描述了将规模为n的问题划分为a个子问题的算法的运行时间,每个子问题的规模为n/b。

在这里可以看到,分治法就相当于a=2, b=2, f(n) = O(n).

主方法依赖于主定理:(图片点击放大)

zhudingli图片可以不清晰,可以看书。

主定理的三种情况,经过分析,可以发现都是把f(n)与1 比较。

第一种情况是1 更大,第二种情况是1 与f(n)相等,第三种情况是f(n)更大。

但是,这三种情况并未完全覆盖所有可能的f(n):

第一种情况是f(n)多项式的小于1 ,而第三种情况是f(n)多项式的大于1 ,即两者相差的是2。如果两者相差的不是2 ,则无法用主定理来确定界。

比如算法导论P44最下面的3 就不能用主定理来判断。

(这里所说的多项式大于和多项式小于的意思是因子的指数要不一样,相差2


  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值