在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解。实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较常用的有以下四种方法:

(1)代入法(Substitution Method)
    
    代入法的基本步骤是先推测递归方程的显式解,然后用数学归纳法来验证该解是否合理。
    
    (2)迭代法(Iteration Method)
    
    迭代法的基本步骤是迭代地展开递归方程的右端,使之成为一个非递归的和式,然后通过对和式的估计来达到对方程左端即方程的解的估计。
    
    (3)套用公式法(Master Method)
    
    这个方法针对形如“T(n) = aT(n/b) + f(n)”的递归方程。这种递归方程是分治法的时间复杂性所满足的递归关系,即一个规模为n的问题被分成规模均为n/b的a个子问题,递归地求解这a个子 问题,然后通过对这a个子间题的解的综合,得到原问题的解。
    
    (4)差分方程法(Difference Formula Method)

可以将某些递归方程看成差分方程,通过解差分方程的方法来解递归方程,然后对解作出渐近阶估计。
    
    下面就以上方法给出一些例子说明。
        
    一、代入法
    
    大整数乘法计算时间的递归方程为:T(n) = 4T(n/2) + O(n),其中T(1) = O(1),我们猜测一个解T(n) = O(n2 ),根据符号O的定义,对n>n0,有T(n) < cn2 - eO(2n)(注意,这里减去O(2n),因其是低阶项,不会影响到n足够大时的渐近性),把这个解代入递归方程,得到:
    
    T(n) =  4T(n/2) + O(n)
           ≤ 4c(n/2)2 - eO(2n/2)) + O(n)
           =  cn- eO(n) + O(n)
           ≤ cn2 
    
    其中,c为正常数,e取1,上式符合 T(n)≤cn2 的定义,则可认为O(n2 )是T(n)的一个解,再用数学归纳法加以证明。
    
    二、迭代法

某算法的计算时间为:T(n) = 3T(n/4) + O(n),其中T(1) = O(1),迭代两次可将右端展开为:
    
    T(n) = 3T(n/4) + O(n)
         = O(n) + 3( O(n/4) + 3T(n/42 ) )
         = O(n) + 3( O(n/4) + 3( O(n/42 ) + 3T(n/43 ) ) )
         
    从上式可以看出,这是一个递归方程,我们可以写出迭代i次后的方程:
    
    T(n) = O(n) + 3( O(n/4) + 3( O(n/42 ) + ... + 3( n/4i + 3T(n/4i+1 ) ) ) )
    
    当n/4i+1 =1时,T(n/4i+1 )=1,则
    
    T(n) = n + (3/4) + (32 /42 )n + ... + (3i /4i )n + (3i+1 )T(1)
         < 4n + 3i+1 
         
    而由n/4i+1 =1可知,i<log4 n,从而
    
    3i+1 ≤ 3log4 n+1 = 3log3 n*log4 3 +1 = 3nlog4 3
    
    代入得:
    
    T(n) < 4n + 3nlog4 3,即T(n) = O(n)。
    
    三、套用公式法
    
    这个方法为估计形如:

  T(n) = aT(n/b) + f(n)

  其中,a≥1和b≥1,均为常数,f(n)是一个确定的正函数。在f(n)的三类情况下,我们有T(n)的渐近估计式:

1.若对于某常数ε>0,有f(n) = O(nlogb a-ε ),则T(n) = O(nlogb a )
    
    2.若f(n) = O(nlogb a ),则T(n) = O(nlogb a *logn)
    
    3.若f(n) = O(nlogb a+ε ),且对于某常数c>1和所有充分大的正整数n,有af(n/b)≤cf(n),则T(n)=O(f(n))。
    
    设T(n) = 4T(n/2) + n,则a = 4,b = 2,f(n) = n,计算得出nlogb a = nlog2 4 = n2 ,而f(n) = n = O(n2-ε ),此时ε= 1,根据第1种情况,我们得到T(n) = O(n2 )。
    
    这里涉及的三类情况,都是拿f(n)与nlogb a 作比较,而递归方程解的渐近阶由这两个函数中的较大者决定。在第一类情况下,函数nlogb a 较大,则T(n)=O(nlogb a );在第三类情况下,函数f(n)较大,则T(n)=O(f (n));在第二类情况下,两个函数一样大,则T(n)=O(nlogb a *logn),即以n的对数作为因子乘上f(n)与T(n)的同阶。
    
    但上述三类情况并没有覆盖所有可能的f(n)。在第一类情况和第二类情况之间有一个间隙:f(n)小于但不是多项式地小于nlogb a ,第二类与第三类之间也存在这种情况,此时公式法不适用。

递归式求时间复杂度的代入法与迭代法的举例讲解相关推荐

  1. 递归式求时间复杂度的递归树的方法举例说明

    用递归树的时候注意一下递归树的写法规则: (1) 每层的节点为T(n) = kT(n / m) + f(n)中的f(n)在当前的n/m下的值,所以每一层并不是写为T(n / m) , 并且递归树的根节 ...

  2. 递归式的时间复杂度的计算

    递归算法的时间复杂度分析 在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解.实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而 ...

  3. 递归树求递归算法时间复杂度

    开篇前言:为什么写这篇文章?笔者目前在学习各种各样的算法,在这个过程中,频繁地碰到到递归思想和分治思想,惊讶于这两种的思想的伟大与奇妙的同时,经常要面对的一个问题就是,对于一个给定的递归算法或者用分治 ...

  4. 如何用递归树求快速排序时间复杂度

    其实也就是点看算法导论的心得,感觉算法导论写的有点不详细的补充 快速排序 我的理解就是利用分治法 ,递归排序最后合并的排序,因为快速排序的最坏时间复杂度比较低所以快速被叫做快速排序如图 对于求快速排序 ...

  5. 分治算法中的数学——求解递归式(代入法)

    前言 在运用分治法将原问题分解成多个子问题后,通常可以得到一个关于时间复杂度的递归式,如T(n)=T(n/2)+O(1),如何求解递归式并得出该算法的时间复杂度O(f(n))就是我们要解决的问题.一般 ...

  6. 替换法(代入法)求解递归式

    一.原理 替换法(或者叫代入法)就是我们直接对T(n)进行猜测,然后带入原递归式中进行验证.也就是猜测一个界,然后使用数学归纳法来证明这个界是对的. 步骤{\color{Red}步骤}步骤 : (1) ...

  7. python 求和并排序_Python算法教程第三章知识点:求和式、递归式、侏儒排序法和并归排序法...

    本文目录:一.求和式:二.递归式:三.侏儒排序法和并归排序法 微信公众号:geekkr 一.求和式 # 假设有一函数为f(),则在Python中经常使用的求和方法如下. sum(f(i) for i ...

  8. Python算法教程第三章知识点:求和式、递归式、侏儒排序法和并归排序法

    本文目录:一.求和式:二.递归式:三.侏儒排序法和并归排序法 微信公众号:geekkr </br> </br> </br> 一.求和式 # 假设有一函数为f(),则 ...

  9. 4.3—代入法求解递归式

    对于代入法求解递归式,有以下自己的感触: 1.中间的证明过程用到了数学归纳法的思想: (1)首先证明初始条件是不是满足的,例如T(n)=O(nlgn),首先得验证当n=1的时候是不是满足条件,这里还牵 ...

最新文章

  1. MegaRAID阵列卡配置RAID阵列 - WebBIOS - CLI
  2. 虹软人脸识别Android Sample Code
  3. java 进程100_原创:如何排查java进程cpu100%的问题
  4. Microsoft photosynth(图片三维展示)
  5. 科学家的假想-substr的妙用
  6. Mac - 设置NSButton 的背景色
  7. 互联网日报 | 5月25日 星期二 | 华为再次重申不造车;贝壳宣布左晖为公司“永远的荣誉董事长”;清华大学成立量子信息班...
  8. 外媒称青客公寓计划赴美IPO 筹资1.5亿美元
  9. Python用正则表达式匹配ABAC和AABB的词语
  10. 【C练习】两个已经从小到大的数组合并成为一个从小到大排序的数组
  11. 从零开始学习makefile(7) makefile的filter的作用
  12. jquery读取表单中提交的数据
  13. 高中数学学习方法的8个诀窍,高中生必看
  14. JAVA经典算法大全
  15. python自动剪视频_python剪切视频与合并视频的实现
  16. 计算机的表白隐藏功能,微信隐藏符号功能大全 情人节可以发这些表白
  17. 看了一遍蝴蝶效应1,在看到了一篇很好的《蝴蝶效应1》影评
  18. App Store上架之开发者账号申请
  19. HTTPS 的实现原理
  20. u盘启动 v5 华为2288h_华为 2288HV5服务器安装windows2012R2

热门文章

  1. 2021年春季学期-信号与系统-第五次作业参考答案-第十小题
  2. 创界uVision下的ADuC845的工程文件
  3. 在MATPLOTLIB中加入汉字显示
  4. python重复执行函数_Python threading 单线程 timer重复调用函数
  5. integer比较_Java整数缓存Integer.valueOf(127)==Integer.valueOf(127)为True
  6. eltable刷新整个表格方法_Word表格函数计算怎么做?都在这篇!
  7. 服务器同步什么文件类型,不同服务器同步文件类型
  8. android de,什么是Android Pre-Dexing,以及如何提高性能?
  9. 3月 致 -.-- -..- -
  10. php生成背景并加字,PHP给图片添加文字水印实例