第二十七节-递归树

什么是递归树

递归的思想,就是将大问题分解为小问题,再将小问题分解为小小问题。这样一层一层分解,直到问题的数据规模被分解得足够小,不用继续分解为止。

如果我们把这个一层一层分解的过程画成图,它其实就是一棵树。我们给这棵树起一个名字,叫做递归树

递归树

用递归树来分析递归算法的时间复杂度

以递推公式 f(n) = f(n-1) + f(n-2) 为例,它的时间复杂度递推公式为 T(n) = T(n-1) + T(n-2) + c

从出发到叶子节点,最短路径是一直走 n-2 这条递归路线,长度是 n/2;最长路径是一直走 n-1这条递归路线,长度是 n

每次分解需要做一次加法运算,我们把这次加法运算的时间复杂度记为常数 1。那么第一层需要消耗时间 1,第二层需要消耗时间 2,第三层需要消耗时间 2^2=4 ……。依次类推,第 k 层需要消耗 2^(k-1) 的时间。从第一层累加到第 k 层, 总共需要消耗 1 + 2 + 4 + …… + 2^(k-1) = 2^k -1 的时间。

然后回头看递归树的图,如果递归时都走 n-2,那么路径长度就是 2/n,如果整棵树的所有路径长度都是 n/2,那么整个算法的时间复杂度就是 O(2^(n/2) - 1) 。同理如果都是最长路径 n ,那么整个算法的时间复杂度就是 O(2^n -1)。当我们从图中可以看到,整个递归树是介于全部都是最短路径和全部都是最长路径之间的情况,所以时间复杂度也是在两者之间,但是我们可以看到两者 O(2^(n/2) - 1) 和 O(2^n -1) 都是指数级别的时间复杂度。故最后整个算法是指数级别的时间复杂度。

概况分析方法

  1. 画出递归树,递推公式。
  2. 分析每层需要消耗的时间
  3. 计算边界时间复杂度(都是最长路径、都是最短路径)
  4. 总复杂度就在边界复杂度之间。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 很快,张飞便否定了自己的想法,自己也上了十几年学了,明明知道这世上并没有轮回再生之说,但还是忍不住这样想了...
    清灵之空阅读 337评论 0 1
  • 黄配蓝,原色的搭配。总会让一些小伙伴感觉过于鲜艳,不敢去穿。其实黄配蓝近些年非常流行。 撞色搭配,可以使过时的单品...
    潍坊谷德DD李玉苹阅读 754评论 3 1
  • 乌云下,我并不想回家 没办法,就在大马路边的书吧 喝杯咖啡吧 想起那一年,站在雨中说怕 亲爱的,那些記憶呢 是不是...
    人生请多逗留阅读 513评论 0 1
  • 1. 救援队找到我的时候,我已经遍体鳞伤,大概算的上是奄奄一息了,左边的锁骨连着肩膀三角肌的地方已经血肉模糊。两条...
    子风藤阅读 2,715评论 127 116

友情链接更多精彩内容