基于主定理以及递推树求解递归算法的时间复杂度

article/2025/9/19 3:13:50

非递归算法的时间复杂度可以通过找到执行次数最多的代码,计算其执行次数即可。但是递归算法的时间复杂度则无法通过这种方式求得。有一种最简单的求递归算法的方式,即利用递推方法求解时间复杂度。如下所示:
在这里插入图片描述
这种方法求时间复杂度很简单,但是可以如此简单的使用这种方法的情况很少,往往需要比较复杂的公式推导。因此利用这种方法求时间复杂度比较困难,需要利用别的方式进行求导。主要是以下两种方式:主定理递推树

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啊


http://chatgpt.dhexx.cn/article/kyefbi8q.shtml

相关文章

时间复杂度-主定理分析

目录 1.定理 2.举例 1.定理 主定理分析是一种时间复杂度的计算方式,当时间复杂度推根据实际情况推算出来是下面T(n)的形式的时候,可以通过主定理分析计算它的时间复杂度。 其实就是根据前半部分的a,b,计算出一个结果,再和后面的…

递归式求解-主定理

1.主定理:设a>1和b>1为常数,设f(n)为一函数,T(n)由递归式 对非负整数定义,其中n/b指下取整或上取整.那么T(n)可能有如下的渐进界: (1)若对于某常数 ε>0,有,则; (2)若.则; (3)若对于某常数 ε>0,有,且某常数 c<1与所有足够大的n,有,则 2.主定理的使用方法. 由主…

使用主定理求时间复杂度

文章目录 使用主定理求时间复杂度主定理直接可用主定理转化之后可以利用主定理使用主定理求时间复杂度 很多算法最后都可以写出 T ( n ) = a T ( n b ) + f ( n ) ) ( a ≥ 1 , b ≥ 1 ) T(n)=aT(\frac{n}{b}) + f(n)) (a\ge1,b\ge1) T(n)=aT(bn​)+f(n))(a≥1,b≥1) 的递推式…

主定理学习笔记

主定理用于求递推方程的阶。 设a>1, b>1为常数&#xff0c;f(n)为函数&#xff0c;T(n)为非负整数&#xff0c;且 T(n) aT(n/b) f(n) &#xff08;注意a、b取值范围&#xff09; a代表递归调用子问题的个数(子问题数>小于原问题&#xff0c;故a>1)n / b代表子…

主定理证明

转自GoogleSite算法导论习题解答&#xff0c;先fork一下 算法导论其实已经给出了具体的证明步骤&#xff0c;但是还是有些省略&#xff0c;此文章是对主定理进行了完全的证明&#xff1b; 主定理的证明大致分为两个阶段&#xff1a; (1)假设n为b的整数次幂&#xff0c;如1,b,b^…

主定理(递归式分析)

上图来自《算法导论》 其意思为&#xff1a; 令a≥1&#xff0c;b>1都是常数&#xff0c;f(n)是一个函数 T&#xff08;n&#xff09;是定义在非负整数上的递推式&#xff1a; 1、对某个常数&#xff0c;有&#xff0c;则 2、若&#xff0c;则 3、对某个常数&#xff…

主定理学习及理解

主定理证明 请参考该文章: https://wenku.baidu.com/view/993d716a84868762cbaed522.html 主定理理解运用 看完上面的推导证明, 想必对主定理的推导有了一定理解, 那么又如何理解运用呢? 先晒下公式: 公式大致阐明了三种情况: f(n) < nlogb a, 则取时间复杂度为O(nlogb…

主定理

《目录》 使用主定理求解递归式? 算例 ?证明主定理 使用主定理求解递归式 主定理是分治算法分析中非常重要的定理。 如&#xff0c;我们要处理一个 规模为 的问题通过分治&#xff0c;得到 个规模为 的问题&#xff0c;分解子问题和合并子问题的时间是 &#xff1a; 在上…

主定理(Master Theorem)

主定理是分析分治算法时间复杂度很重要的一个定理。 我们之前对于一个递归类的代码进行时间复杂度分析&#xff0c;一般会采用递归树的方式&#xff0c;下面我们先介绍一下递归树的方式&#xff0c;理解之后&#xff0c;再引入主定理的相关内容。 分治的介绍 分治算法总是将…

主定理(Master Theorem) 及其应用

主定理"Master Theorem" 一、主定理(Master Theorem)二、应用举例 在分析算法的时候&#xff0c;我们经常需要分析递归算法的时间复杂度。 一、主定理(Master Theorem) 主定理适用于求解如下递归式算法的时间复杂度&#xff1a; 其中&#xff1a; n 是问题规模大…

2020.10.27【GWAS】丨使用vcftools绘制pi(θπ) 选择消除分析图

这两天在整理GWAS流程&#xff0c;发现绘制θπ选择消除分析图在网上只能找到计算π的代码&#xff0c;但是没有绘图代码&#xff0c;于是自己搞了一下&#xff0c;供大家参考。 vcftools --vcf AxiomGT1.calls.vcf --window-pi 1000 --window-pi-step 1000 --out GT1_pi 生成…

使用vcftools或者gcta计算群体间固定指数(Fixation index,FST)

下列所用到的数据均为千人基因组数据库 1、通过vcftools计算FST 命令行如下&#xff1a; ./vcftools --vcf input_data.vcf --weir-fst-pop population_1.txt --weir-fst-pop population_2.txt --out pop1_vs_pop2 其中&#xff0c;input_data.vcf就是输入的vcf格式 population…

那些在vcftools安装上踩的坑

[TOC]那些在vcftools上踩的坑 那些在vcftools安装上踩的坑 近期由于学习需要所以需要安装vcftools做基因比对分析。然后的然后就各种问题来了… vcftools在kail linux 系统下安装 老生常谈的话题就直接上代码吧。 // 这个想必大家都很熟悉 tar -zxvf vcftools_0.1.13.tar.…

vcftools如何在Linux系统中安装

这里&#xff0c;记录一下vcftools的安装教程。 1. 下载 https://vcftools.github.io/examples.html 下载到本地&#xff0c;上传到服务器中。 2. 解压缩 unzip vcftools-vcftools-v0.1.16-18-g581c231.zipcd vcftools-vcftools-581c231/3. 安装 bash autogen.sh ./configur…

vcftools 安装 (bash autogen.sh ./configure出问题)

安装可以直接从gitclone安装&#xff0c;省略下载安装包及解压的过程&#xff0c;代码如下 git clone https://github.com/vcftools/vcftools.git 官方的教程步骤接下来是配置环境及安装 bash autogen.sh ./configure make make install 但是我之前一直在这一步卡了很久…

vcftools-linux-conda安装、使用

shell conda命令安装&#xff1a; conda install -c bioconda vcftoolsvcftools文档&#xff1a; OUTPUT FILE OPTIONS--out <output_prefix>This option defines the output filename prefix for all files generated by vcftools. For example, if <prefix> is…

Chr函数

函数chr&#xff08;&#xff09;的作用是返回其参数所表示的字符&#xff0c;参数是这个字符的ASCII码。 CHR函数&#xff0c;传入一个数值&#xff0c;返回这个数值对应的ascii码字符&#xff0c;比如chr(65)输出的是大写的A 示例&#xff1a; Private Sub Command2_Click…

Python笔记:内置函数chr()用法

chr(i) chr()&#xff1a;输入一个整数【0&#xff0c;255】返回其对应的ascii符号&#xff0c;相反ord&#xff08;&#xff09;函数就是用来返回单个字符的ascii值&#xff08;0-255&#xff09;或者unicode数值&#xff08;&#xff09;参数 i :可以是10进制也可以是16进制的…

python中的chr和ord函数_python chr/ord函数区别和使用

原博文 2020-03-16 10:04 − python中 内置函数 chr 和 内置函数 ord 可以配对使用&#xff1b;chr函数将ascll码转为字符&#xff1b;ord函数将字符转为ascll码; 一.chr函数将ascll码转为字符 chr(65) >>&gt... 相关推荐 2019-12-23 08:11 − day3复习 >…

python中chr函数是什么意思_python函数之chr(i)

chr(i) 中文说明&#xff1a; 返回整数i对应的ASCII字符。与ord()作用相反。 参数x&#xff1a;取值范围[0, 255]之间的正数。 版本&#xff1a;该函数在python2和python3各个版本中都可用。不存在兼容性问题。 英文说明&#xff1a; Return a string of one character w…