基于主定理以及递推树求解递归算法的时间复杂度
非递归算法的时间复杂度可以通过找到执行次数最多的代码,计算其执行次数即可。但是递归算法的时间复杂度则无法通过这种方式求得。有一种最简单的求递归算法的方式,即利用递推方法求解时间复杂度。如下所示:
这种方法求时间复杂度很简单,但是可以如此简单的使用这种方法的情况很少,往往需要比较复杂的公式推导。因此利用这种方法求时间复杂度比较困难,需要利用别的方式进行求导。主要是以下两种方式:主定理、递推树。
1.主定理
递归算法的时间复杂度定义一般有如下形式:
在大部分情况下,可以通过主定理,求解该问题的时间复杂度。
注:要求 a大于等于1,b大于1,且f(n)为正函数。
计算步骤
其中,规则1,2是比较简单就可以计算出来的,规则3则比较复杂。
例题1
通过计算可得:
而f(n)的时间复杂度为O(1)=O(n^(2-2)),也就是说
符合第一种情况,则
例题2
通过计算可得:
而f(n)的时间复杂度为O(n)=O(n),也就是说,二者相等。
符合第二种情况,则
例题3
通过计算可得:
这种情况则应该套用规则三,
根据主定理的第三种规则,时间复杂度为:
反例
主定理求解的步骤不是很复杂,大部分的情况利用该定理可以得到解决,但是也有无法解决的情况:
由于这种情况,单纯的使用主定理已经无法解决了,因此引入递归树的求解方法。
递归树
基本原理如下所示:
递归树求解递归算法的时间复杂度,没有无法求解的情况,可能有的情况下求解时间复杂度很复杂,但是本质上都是可以求得的。
例题1
这种情况比较简单,但是里面有一个比较容易混淆的地方,在第二行的n/2,代表着数据量为n/2时,时间复杂度为n/2。这里代表的是时间复杂度,而不是数据量 。看下面这个例子,
在第二层,分出了4个枝杈,这代表着表达式中的4。但是这4个枝杈,左边的两个代表 第一个n/2的,右边的两个代表第二个n/2的。简而言之,递归树的层数,需要看T()的括号里面,而每一层的分支数,则需要看C*T()中的C。
例题2
这是主定理无法解决的那种情况,我们通过递归树来求一下。结果如下所示:
努力加油a啊
基于主定理以及递推树求解递归算法的时间复杂度相关推荐
- [数据结构]递归树:借助树求解递归算法的时间复杂度
文章目录 递归树与时间复杂度分析 实战一:分析快速排序的时间复杂度 实战二:分析斐波那契数列的时间复杂度 实战三:待补充,先学其他的... 递归树与时间复杂度分析 我们前面讲过,递归的思想就是,将大问 ...
- 递归树求解递归算法的时间复杂度
递归算法时间复杂度的计算方程式一个递归方程: 在引入递归树之前可以考虑一个例子: T(n) = 2T(n/2) + n2 迭代2次可以得: T(n) = n2 + 2(2T(n/4) + (n/2) ...
- 【组合数学】递推方程 ( 无重根递推方程求解实例 | 无重根下递推方程求解完整过程 )
文章目录 一.斐波那契数列求解 二.无重根下递推方程求解完整过程 一.斐波那契数列求解 1 . 斐波那契数列示例 : ( 1 ) 斐波那契数列 : 1,1,2,3,5,8,13,⋯1 , 1 , 2 ...
- 【数字信号处理】线性常系数差分方程 ( 使用递推解法求解 “ 线性常系数差分方程 “ | “ 线性常系数差分方程 “ 初始条件的重要性 )
文章目录 一.使用递推解法求解 " 线性常系数差分方程 " 二." 线性常系数差分方程 " 初始条件的重要性 一.使用递推解法求解 " 线性常系数差分 ...
- [递推式求解、多指针、前缀和]XATU第七届算法大赛
文章目录 赛后感想 1.2题略 3 乐华水上梦幻乐园之拖鞋失踪案[概率论.递推式求解] 题意 分析 代码 4.5.6.7.8题略 9 Ugly Number[多指针] 题意 做法1[BFS with ...
- 递归树: 如何借助树来求解递归算法的时间复杂度
------ 本文是学习算法的笔记,<数据结构与算法之美>,极客时间的课程 ------ 今天,来讲树这种数据结构的一种特殊的应用,递归树. 我们都知道,递归代码的时间复杂度分析起来很麻烦 ...
- 【组合数学】递推方程 ( 常系数线性非齐次递推方程求解 | 递推方程标准型及通解 | 递推方程通解证明 )
文章目录 一.递推方程标准型及通解 二.递推方程通解证明 一.递推方程标准型及通解 H(n)−a1H(n−1)−⋯−akH(n−k)=f(n)H(n) - a_1H(n-1) - \cdots - a ...
- 斐波拉契数列的递推递归求解算法
介绍: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数 ...
- 最短线性递推式求解与有理函数重建
这一算法来自于我们对"线性递推式拟合"的视角转换,其后得到的算法是自然的. 引理 1. 如果两个有理分式 p1/q1,p2/q2p_1/q_1, p_2/q_2p1/q1,p2 ...
最新文章
- java double转换符_java中字符串怎么转换成double类型
- traceback异常打印
- 2021年技术人员的最佳Linux桌面前5名
- 母亲,我怎么让你等了那么久(转载)
- spring和hibernate整合的几种方式详细介绍
- Microsoft SQL server 2000 安装挂起 mssql 2000 挂起无法安装的问题
- 用Unity3D实现可展开公告版
- Java多线程-新特性-线程池
- Python 中的range,以及numpy包中的arange函数
- Oracle 行转列pivot 、列转行unpivot 的Sql语句总结
- 如何修复Win11上的时钟不同步?Win11时钟不同步修复方法
- android java 图形_java – 在Android中呈现的图像上的锯齿状边缘
- 2021年最优秀的新闻APP或许是这两个(国内没上架)
- Linux用户和组权限管理
- java模拟魔兽世界武器掉落
- 《影响力》(你为什么会说“是”?)读书
- 2016年中国智能手机市场发展趋势研究
- 阿里旺旺输入框内光标排在右侧,想让其排在左侧解决办法
- 服务器系统不打补丁,windows系统打补丁导致系统起不来处理
- 图画日记怎么画_图画日记怎么画_二年级下册绘画日记图片