什么是递归树
递归的思想就是,将大问题分解为小问题来求解,然后再将小问题分解为小小问题。这样一层一层地分解,直到问题的数据规模被分解得足够小,不用继续递归分解为止。
如果我们把这个一层一层的分解过程画成图,它其实就是一棵树。我们给这棵树起一个名字,叫作递归树。
斐波那契数列的递归树
利用递归树计算归并排序的时间复杂度
- 每次分解都是一分为二,所以代价很低,我们把时间上的消耗记作常量1。归并算法中比较耗时的是归并操作,也就是把两个子数组合并为大数组。从图中我们可以看出,每一层归并操作消耗的时间总和是一样的,跟要排序的数据规模有关。我们把每一层归并操作消耗的时间记作n
- 现在,我们只需要知道这棵树的高度h,用高度h乘以每一层的时间消耗n,就可以得到总的时间复杂度O(n*h)。
- 归并排序递归树是一棵满二叉树。我们前两节中讲到,满二叉树的高度大约是logn,所以,归并排序递归实现的时间复杂度就是O(nlogn)
快排的时间复杂度
- 每层的操作的时间总和是一样的,跟要排序的数据规模有关。我们把每一层归并操作消耗的时间记作n
-
快排不是1/2的区分,所以不是满二叉树。算出最短路径和最长路径
- 对数复杂度的底数不管是多少,我们统一写成logn。时间复杂度是O(nlogn)
斐波那契数列递归算法时间复杂度
O(2^n)