递归树

作者: 花椒人生 | 来源:发表于2020-06-21 23:40 被阅读0次
一:递归树与时间复杂度分析

1,递归思想就是将大问题分解为小问题来求解,然后在将小问题分解为小小问题,将问题一层一层地分解,直到问题的数据规模被分解得足够小,不要继递归分解为止。

2,用递归树来求解归并排序的时间复杂度

①:每次分解是一分为二,所以代价很低,将时间上的消耗记作常量1。
②:归并算法中比较耗时的归并操作,也就是把两个子数组合并为大数组
③:每一层归并操作消耗的时间总和是一样的,跟要排序的数据规模有关,将每层归并操作消耗的时间记作n。
④:我们只需要知道这颗树的高度h,用高度乘以每层的时间消耗n,就可以得到总的时间复杂度O(n*h)。
⑤:从归并排序的原理和递归树,可知归并排序递归树是一颗满二叉树,满二叉树的高度大约为log2n,所以归并排序递归实现的时间复杂度就是O(nlogn)。

二:分析快速排序的时间复杂度

①:快速排序在最好情况下,每次分区都能一份为二,这个时候用递归公式T(n)=2T(n/2)+n,可以推导出时间复杂度是O(nlogn)。
②:但并不是总能非常平均的分区,所以通过公式推导时间复杂度会非常复杂。
③:快速排序的过程中,每次分区都要遍历待分区区间的所有数据,所以,每一层分区操作所遍历的数据的个数之和就是n。只要求出递归树的高度h,这个快排过程遍历的数据个数就是hn,即时间复杂度就是O(hn)。
④:因为每次分区并不是均匀地一分为二,所以递归树并不是满二叉树。
⑤:因为快速排序结束的条件是待排序的小区间,大小为1,即叶子节点里的数据规模是1。
⑥:从根节点n到叶子节点1,递归树中最短的一个路径每次都乘以1/10,最长的一个路径每次都乘以9/10。
⑦:通过计算,从根节点到叶子点最短路径是log10n,最长的路径是log10/9 n。

⑧:遍历数据的个数总和就介于nlog10n和nlog10/9 n之间。根据复杂度O表示法规则,当分区大小比例是1:9时,快速排序的时间复杂度仍然是O(nlogn)。

三:斐波那契数列的时间复杂度

①:f(n)分解为f(n-1)和f(n-2),每次数据规模都是-1或-2,叶子节点的数据规模是1或2。所以从根节点走到叶子节点,每条路径是长短不一的。
②:如果每次都是-1,那最长路径大约就是n;如果每次都是-2,那最短路径大约就是n/2。
③:第k层的时间消耗是2(k-1),总时间消耗之和是2n -1

四:分析全排列的时间复杂度

n + n(n-1) + n(n-1)(n-2) +... + n(n-1)(n-2)...21

相关文章

  • 3 递归(19)(方法层面的高级循环)

    递归 树的递归 其它递归

  • 树的遍历算法

    树的递归遍历 树的层次遍历 树的非递归前序遍历 树的非递归中序遍历

  • 二叉树的前序、中序、后序遍历(递归、非递归)

    二叉树 前序 递归: 非递归: 中序 递归: 非递归: 层序 递归: 非递归:

  • 数据结构之二叉树

    数据结构之二叉树 递归构造二叉树 二叉树节点: 递归构造: 图示: 递归遍历 递归实现先序遍历 图示: 递归实现中...

  • 二叉树算法之0-计算二叉树的深度

    算法思想:使用递归 算法解析:分别递归左树和右树,递归到叶子节点时返回0,递归回溯时值+1,不断累积回溯的深度,每...

  • 算法之二叉树

    二叉树之C++实现 创建二叉树 复制二叉树 先序遍历 递归实现 非递归实现 中序遍历 递归实现 非递归实现 后序遍...

  • 二叉树及leetcode练习题

    二叉树 二叉树天然的递归结构 二叉树本身就是一个递归的定义。先来看一下递归的前序遍历: 递归的定义:递归终止条件 ...

  • 递归树

    一:递归树与时间复杂度分析 1,递归思想就是将大问题分解为小问题来求解,然后在将小问题分解为小小问题,将问题一层一...

  • php无限极分类

    递归--无限极分类 递归--子孙树转二维数组 可以配合Nestable使用 递归--获取树所有叶子节点 结果1 结...

  • 树的遍历

    1、利用递归的方式获取树的前序遍历结果 2、 利用递归的方式获取树的中序遍历结果 3、利用递归的方式获取树的后序遍...

网友评论

      本文标题:递归树

      本文链接:https://www.haomeiwen.com/subject/vpttfktx.html