算法导论 渐进 、递归

麻省理工公开课 算法导论 渐进、递归

看了一下 前面的 Tn的复杂度证明 应该没啥好纠结的,递归树 猜答案 , 代换法验证,然后递归树的每一层的和 可以组成一个等比级数 ,求的和就是递归式的上界,所以 公比为(5/16)*n^2的等比级数的和
是Tn=T(n/2)+T(n/4)+n^2的上界,又因为5/16比1/2小,而公比1/2的等比级数的和小于2(1/2+1/4+1/8…的结果换成2进制就是1.111111永远达不到2) Tn<2n^2 即O(n^2)是上界,因为递归式Tn=T(n/2)+T(n/4)+n^2里面含有n^2这一项 所以O(n^2)也是下界,得出结论 递归公式=O(n^2); 主要介绍一下main方法

main方法把另一种常见情况做了字母代换,即T(n)=aT(n/b)+f(n),其中b>1 代表子问题不断减小,否则会无限大,也可以从图上面看出来,因为根据上面构造递归树的方法 递归树深度为logb(n),即图1,如果b<=1 则深度是无限大

a>=1代表 Tn至少可以分解为一个以上的规模相同的子问题 (不然不好画树枝 我是这么理解的 :)

f(n)需要满足渐进趋正 对足够大的n ,f(n)是正数,他说只考虑这个。。那就这样吧

比较f(n) 和n^logb(a) , 从上面的图里面的证明得知n^logb(a)为叶子节点的个数,下面是三种情况 小于 等于 大于: 1、 f(n)多项式小于n^logb(a) 多项式小于 就是n^2小于n^3的那种可以忽略的感觉 此时T(n)= θ(n^logb(a))

因为此时理想状态下 T(n) = n^logb(a) 个T(1) + (n^logb(a) )/a个 f(b) 就是倒数第一层所有的T(1)和倒数第二层所有的f(n/b^(x-1)) 因为 f(n)已经相对于n^logb(a)非常小了 ,所以T(n)= θ(n^logb(a))

2、f(n)基本上等于,视频里面举得例子是θ(n^logb(a)(log2(n))^K) K为1或者0的时候 f(n)=θ(n^logb(a))或者θ(n^logb(a)log2(n))

T(n) = n^logb(a) T(1) + ( (n^logb(a) )/a) f(b) = n^logb(a)(T(1)+f(b)/a) 此时因为f(b)等于 b^logb(a) (log2(b))^k =a(log2(b))^k 原式= (n^logb(a)(T(1)+ (log2(b))^k) T(1)忽略,b<n ,k<k+1 原式= θ(n^logb(a))*( log2(n))^(k+1)

3、f(n) 多项式大于 n^logb(a) 此时还需要对f(n)做假设是递减的, 如果是递增则结果就是无穷大 没有意义, 所以必须是递减 假设用的例子是:af(n/b) <=(1-s)f(n) 对于一些足够小的正数s恒成立

这么假设是为了必须保证每层数字越来越小 T(n) =θ( f(n)) 因为T(n)按照递归树结构分解后,按照af(n/b) <=(1-s)f(n)规则, f(n)比下面一层所有的加起来都大,不需要算就知道 是θ( f(n))

转载于:https://my.oschina.net/u/3678539/blog/2048626

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值