master公式求递归时间复杂度

 

转载连接:http://blog.csdn.net/qq_33859479/article/details/78295039

 

 

 

什么是Master定理

简介

 

Master定理也叫主定理。它提供了一种通过渐近符号表示递推关系式的方法。应用Master定理可以很简便的求解递归方程。然而,Master定理也有其不适用的地方,下面会讲到。

定义

假设有如下递归方程:

 

T(n)=aT(nb)+f(n)

 

其中n为问题规模,a为递推的子问题数量且a≥1,nb为每个子问题的规模(假设每个子问题的规模基本一样)且b>1,f(n)为递推以外进行的计算工作。

g(n)=nlogba


T(n)=⎧⎩⎨⎪⎪⎪⎪⎪⎪Θ(g(n)),Θ(f(n)),Θ(g(n)lgn),g(n)f(n)>lgnf(n)g(n)>lgnf(n)=g(n)

 

一句话概括就是谁大取谁,相等就乘lgn。

不适用范围

如上定义所述,当g(n)f(n)<=lgn或f(n)g(n)<=lgn时,Master定理是无能为力的。因此,当遇到上面的情况时是不能使用Master定理的。

怎么使用

在应用Master定理时只需自己在心中默默的问上自己几个问题,就可以计算出递归方程的渐进复杂度。下面咱们走上一遍:

  1. a是谁,b是谁,g(n)是多少,f(n)又是多少?
  2. g(n)大还是f(n)大还是一样大?
  3. 如果g(n)大,那么g(n)f(n)>lgn?
  4. 如果f(n)大,那么f(n)g(n)>lgn ?

既然知道了怎么用,那下面就来几个例题再近距离感受下Master定理的强大。

举几个栗子

二分搜索

二分搜索的递归方程如下:

 

T(n)=T(n2)+Θ(1)

 

按照上面的步骤,走上一遍试一下:

在这里, 
1. a=1,b=2,f(n)=1,那么g(n)=nlogba=nlog21=1 
2. f(n)=g(n) 
3. 因此T(n)=Θ(g(n)lgn)=Θ(lgn)

怎么样,是不是很简单。再举几个不同的栗子接着感受下

二叉树遍历

二叉树遍历的递归方程如下:

 

T(n)=2T(n2)+Θ(1)

 

继续按照上面的步骤走:

  1. a=2,b=2,f(n)=1,因此,g(n)=n
  2. g(n)大
  3. g(n)f(n)=n>lgn
  4. 因此T(n)=Θ(g(n))=Θ(n)

依然不费力气,下面再来一个

随便想的栗子一

递归方程如下所示:

 

T(n)=2T(n4)+Θ(nlgn)

 

按照上面的步骤走:

  1. a=2,b=4,f(n)=nlgn,则g(n)=nlog42<n
  2. f(n)大
  3. f(n)g(n)=nlgnnlog42>lgn
  4. 因此T(n)=Θ(f(n))=Θ(nlgn)

随便想的栗子二

递归方程如下:

 

T(n)=2T(n2)+Θ(nlgn)

 

这次再按照上面的步骤走:

  1. a=2, b=2, f(n)=nlgn, 则g(n)=n
  2. f(n)更大
  3. f(n)g(n)=lgn≯lgn
  4. 因此,这个递归方程不能够使用Master定理解决

通过上面的几个栗子应该能对Master定理感觉的差不多了吧?但其实,还是有点小小的问题的。

一点问题

我这篇博客里写的Master定理实际上并不是很严谨,为了更加简便理解与使用对原来的Master定理添加了些自己的理解在里面,完整的Master定理的定义可以参考下面维基百科的描述或者直接到《算法导论》中查看。

当然,我理解的版本的Master定理或许有误,欢迎批评指正。

 

PS:简单的表达方式

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值