首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

求递归关系时间复杂度的主定理

(Master Theorem)是一种用于分析递归算法时间复杂度的方法。它适用于具有特定形式的递归关系式,即形如 T(n) = aT(n/b) + f(n) 的递归关系式,其中 a ≥ 1,b > 1 是常数,f(n) 是一个给定的函数。

主定理的三种情况如下:

情况一:如果 f(n) = O(n^c),其中 c < log_b(a),则递归关系的时间复杂度为 T(n) = Θ(n^log_b(a))。

情况二:如果 f(n) = Θ(n^log_b(a) * log^k n),其中 k ≥ 0,则递归关系的时间复杂度为 T(n) = Θ(n^log_b(a) * log^(k+1) n)。

情况三:如果 f(n) = Ω(n^c),其中 c > log_b(a),且对于某个常数 ε > 0,存在一个常数 d < 1和足够大的 n0,使得对于所有的 n ≥ n0,有 af(n/b) ≤ df(n),则递归关系的时间复杂度为 T(n) = Θ(f(n))。

根据递归关系的形式和给定的函数 f(n),可以根据主定理的三种情况来确定递归算法的时间复杂度。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算服务:https://cloud.tencent.com/product/cvm
  • 腾讯云数据库:https://cloud.tencent.com/product/cdb
  • 腾讯云服务器:https://cloud.tencent.com/product/cvm
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网:https://cloud.tencent.com/product/iot
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobdev
  • 腾讯云存储:https://cloud.tencent.com/product/cos
  • 腾讯云区块链:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/vr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

递归算法时间复杂度

,第一层遍历时间复杂度是n,第二层遍历时间复杂度是n,内层时间复杂度是O(n^2),再加上递归,最后时间复杂度是O(2^n*n^2),这个算法可见很粗糙,假如递归深度到是100,最后执行效率简直会让人头皮发麻...第一层遍历时间复杂度是O(n),加上递归,最后时间复杂度是O(2^n*n),不算太理想,最起码比第一次好点。 再看看一个面试常见题目,斐波拉契数列,n=1,1,3,5,8,13......(n-2) 这个算法时间复杂度是O(2^n),关于时间复杂度具体看调用次数便能明白。...O(1),这样这个算法时间复杂度就是O(n)。...递归算法优化大概就是避免重复运算,将中金状态保存起来,以便下次使用,从结构上来看,是将时间复杂度转换为空间复杂度来解决。

2.2K20

分析递归函数时间复杂度

递归算法时间复杂度表达式: O(T) = R * O(s) O(T)表示时间复杂度 R表示递归调用次数 O(s)每次递归调用计算时间复杂度 想想斐波那契函数,它递归关系是f(n)...递归函数执行树将形成一个n叉树,这个n就是递归递归关系中出现 次数。 还拿斐波那契函数来说事,那它会形成一个二叉树。具体可参考下图。...所以,我们可以估算出f(n)时间复杂度就是O(2n) 备忘录 备忘录技术是用来优化递归算法时间复杂度技术。...通过缓存和重用中间结果方式,备忘录可以极大地减少递归调用次数,也就是减少执行树中分枝数量。所以,当我们使用备忘录来分析递归算法时间复杂度时候应该把这减少部分考虑到。...结论 备忘录不仅优化算法时间复杂度,而且还可以简化时间复杂度计算。 希望能给大家带来一定帮助谢谢。

66650

递归算法时间复杂度分析

转自地址 http://blog.csdn.net/metasearch/article/details/4428865 在算法分析中,当一个算法中包含递归调用时,其时间复杂度分析会转化为一个递归方程求解...(2)迭代法(Iteration Method) 迭代法基本步骤是迭代地展开递归方程右端,使之成为一个非递归和式,然后通过对和式估计来达到对方程左端即方程估计。...这种递归方程是分治法时间复杂性所满足递归关系,即一个规模为n问题被分成规模均为n/ba个子问题,递归地求解这a个子 问题,然后通过对这a个子间题综合,得到原问题解。...一、代入法 大整数乘法计算时间递归方程为:T(n) = 4T(n/2) + O(n),其中T(1) = O(1),我们猜测一个解T(n) = O(n2 ),根据符号O定义,对n>n0,有...二、迭代法 某算法计算时间为:T(n) = 3T(n/4) + O(n),其中T(1) = O(1),迭代两次可将右端展开为: T(n) = 3T(n/4) + O(n)

1.8K50

递归时间复杂度(Master 公式)

我们在解决算法问题时,经常会用到递归递归在较难理解同时,其算法复杂度也不是很方便计算。而为了较为简便地评估递归算法复杂度,Master公式。...在分治算法中,a 常常代表每次递归调用产生子问题数量。例如,在归并排序中,a 值为 2,因为每次递归调用会将问题分为两个子问题。T(N/b):表示每个子问题时间复杂度。...O(N^d):表示除了递归调用之外,算法在每次递归步骤中所做额外工作时间复杂度。O(N^d) 是除了递归调用之外时间开销上界。d 是一个常数,表示额外工作时间复杂度与 N 关系。...所以 Master 公式为:进入结论 3当时,;所以时间复杂度为:O(N * logN) 注意事项我们上面的两种方法都是每次求解子问题时将问题对等分成两份,倘若将数据分成三份,左边三分一数据右边三分之二数据...,这样子的话不符合相同规模划分,就不能使用 Master 公式来计算时间复杂度

14810

剖析递归行为和递归行为时间复杂度估算

一个递归行为例子 master公式使用 T(N) = a*T(N/b) + O(N^d) T(N)是样本量为N时时间复杂度,N/b是划分成子问题样本量,子问题发生了a次,后面O(N^d)是除去调用子过程之外时间复杂度...(arr, mid + 1, R);         return Math.max(maxLeft, maxRight);     } T(N) = 2*T(N/2) + O(1); 这里划分成递归子过程样本量是...N/2,这个相同样本量发生了2次,除去调用子过程之外时间复杂度是O(1),因为最大值和判断if复杂度是O(1),所以N^d=1,所以d=0....那么根据如下公式判断 1) log(b,a) > d -> 复杂度为O(N^log(b,a)) 2) log(b,a) = d -> 复杂度为O(N^d * logN) 3) log(b,a) 复杂度为O(N^d) 这里log(b, a)(以b为底a对数) = log(2, 2)=1 > d=0 所以复杂度为O(N^log(2, 2))===>O(N),因此也就可以解释为什么归并排序时间复杂度

18410

剖析递归行为和递归行为时间复杂度估算

剖析递归行为和递归行为时间复杂度估算 master公式:也叫定理。它提供了一种通过渐近符号表示递推关系方法。 应用Master定理可以很简便求解递归方程。...master公式使用 递归行为形如: T(N) = a*T(N/b) + O(N^d) 均可用下面推到出时间复杂度 (1) log(b,a) > d -> 复杂度为O(N^log(b,a)) (2)...log(b,a) = d -> 复杂度为O(N^d * logN) (3) log(b,a) 复杂度为O(N^d) T(N):       递归时间复杂度 N:            ...递归行为规模|样本数量 N/b:         递归后子过程规模 (b指的是子过程分为几块,比如递归比较运算是左右两块) a:               子过程调用次数 aT(N/b...):    所有子过程时间复杂度 O(N^d) :    除去子过程之外剩下过程时间复杂度 注意: 1.使用master公式推到时间复杂度必须保证每次划分子工程规模是一样 如果形如:

49130

mn次方(优化时间复杂度

卷哥心想这问什么问题,过流程吗? 面试官眉头紧皱: 看面试官意思是对卷哥解法时间复杂度不太满意,卷哥想了15分钟没想出来; 卷哥:卒 题解 正常循环mn次方,时间复杂度为O(n)。...= 0){ result *= m; } return result; } 那还有没有时间复杂度更低算法?...上面我们是固定两个值缩减,效率固定了就是O(n/2),我们再分析一下:平方m值是固定,那我们能不能不固定两个值缩减,反正值固定,每一次平方后n/2这样对数算法效率就很快了。...n/=2; } return r; } 步骤图: 最后r x base = 19683就等同我们上图余出来一个单个m值需要与结果值进行平方 这种方式时间复杂度为...O(logn),相对时间复杂度更低。

81140

一场面试,带你彻底掌握递归算法时间复杂度

很多同学对递归算法时间复杂度都不甚了解 同一道题目,同样使用递归算法,有的同学写出了O(n)代码,有的同学就写出了O(logn)代码 这是为什么呢, 就是因为对递归时间复杂度理解不够深入导致...如果恰巧正在读本文你也对递归算法时间复杂度懵懵懂懂,请认真读完本篇文章,一定会有所收获 这里我想通过一道简单面试题,来带大家逐步分析递归算法时间复杂度,最后找出最优解。...每次n-1,递归了n次 时间复杂度是O(n),每次进行了一个乘法操作,乘法操作时间复杂度一个常数项O(1) 所以这份代码时间复杂度是 n * 1 = O(n) 这个时间复杂度可能就没有达到面试官预期...这个结论在二叉树相关面试题里也经常出现。 这么如果是xn次方,这个递归树有多少个节点呢,如下图所示 ? 时间复杂度忽略掉常数项-1之后,我们发现这个递归算法时间复杂度依然是O(n)。...如果同学们最后写出了这样代码并且时间复杂度分析非常清晰,相信面试官是比较满意。 最后希望通过这么一个简单面试题,让大家真正了解了递归算法时间复杂度该如何分析。

61410

02 复杂度分析_pythoner学习数据结构与算法系列

return n else: return fib(n-1)+fib(n-2) 递归时间复杂度分析 一、画递归树/状态树 Fibonacci第n项 :F(n)=F(n-1...每多展开一层,节点数就是上一层两倍 总节点数就是2^n(指数级增长) 优化: 很多重复结果多次计算冗余; 可以加一个中间缓存,把中间结果缓存下来; 或者直接使用一个循环来写; 二、定理(Master...theorem) 定理主要是用来解决所有递归函数时间复杂度计算 任何分治或者递归函数都可以用定理计算出时间复杂度 常见四种场景: ?...O(n),n代表二叉树节点总数 通过定理得到 或者遍历(不论前、中、后序),每个节点都会访问且仅访问一次, 复杂度是线性于树节点数,所以是 O(n)时间复杂度 同理(图节点也是每个都会访问且仅访问一次...Master theorem 定理 上一篇: 01 数据结构与算法总览 下一篇: 03 数组、链表、跳表

51731

递归算法时间复杂度分析

而我们一般情况下讨论最坏时间复杂度。 空间复杂度: 算法空间复杂度并不是实际占用空间,而是计算整个算法空间辅助空间单元个数,与问题规模没有关系。...经验和一些定理告诉我们,这些细节不会影响算法时间复杂度渐近界。   类似的,我们也可以用迭代法求解汉诺塔递归求解时时间复杂度。但遗憾是,迭代法一般适用于一阶递推方程。...如果f(n)落在这两个间隙中,或者情况3中 正则条件不成立,就不能使用方法来递归式。   ...所以找不到这样 ε>0ε>0,该递归式落入了情况2和情况3之间间隙,不能使用定理。   ...最后给出定理应用几个练习题: 具体举例分析: 【代入法】代入法首先要对这个问题时间复杂度做出预测,然后将预测带入原来递归方程,如果没有出现矛盾,则是可能解,最后用数学归纳法证明。

2.1K20

时间复杂度分析,这个很多人都不知道,更别谈会了!

很多算法都是基于递归思想,我们分析这些递归算法,可以得到关于时间复杂度递归关系式。比如 「归并排序」 时间复杂度一般表示为 ,还有二分查找,汉诺塔问题等等,但是关于递归时间复杂度并不简单。...对于递归时间复杂度计算主要有三种方式: 一、代入法:先对解进行猜想,然后用数学归纳法证明猜想正确性。 已知 ,注意 前面的系数 ; 又很容易得到 和 之间关系式,即 ....可以推知 与 之间关系: ∴ 归并排序时间复杂度为 量级。...二、定理 令 和 是常数, 是一个函数, 是定义在非负整数上递归式: 其中我们将 解释为 或 ,那么 有如下渐近界: 若对某个常数 有 ,则 . 若 ,则 ....定理递归式 所提供一种 “菜谱式” 求解方法,关于定理证明就不在这里解释了,感兴趣可以看一下 《算法导论》4.6 节定理证明。 我们这里直接 “下菜“ 即可。

1.2K10

聊一聊数学中基本定理(五)——定理

而接下来这个定理,名字上虽然已经没有了基本(fundamental)二字,但是其名——定理(main theorem)响度一点也不压于基本定理声音。...定理基本内容 定理是一个由分治算法得到递推关系时候,如何来推导时间和空间复杂度问题。...具体如下: 假设有递归关系式 ,其中 , 为问题规模, 为递归子问题数量, 为每个子问题规模(假设每个子问题规模基本一样), 为递归以外进行计算工作。...则 关于定理思考 在实际应用中,主要用定理来计算在递归算法中复杂度为多少,操作时候主要看就是a和b相对大小复杂度表达n ^ (log_b a)和f(n)之间关系,来决定谁占主要因素...但是,这种优化,计算机科学家是看不上,因为在定理体系下,丝毫没有缩减其在无穷规模下所需要运算时间级别。 另一个差别也是源于这个定义数学化和理想化。

79030

算法基础+分治策略(算法复习第1弹)

如归并排序,忘了归并排序可以参照这里  归并排序 这是其递归式 ? 图七 这是递归式子(方法常用这个式子) ?...图八 递归树式子需要解释地方有 cn其实就是一个函数f(n),这个函数所代表意思是分解和合并步骤所花费时间,哈哈 其(f(n))复杂度为Θ(n),由此再去理解图七中式子就好理解了 下面来用递归方法分治算法渐进界...图九 这个例子也一样,只不过不是递归成一样问题,是两个一样子问题 ? 图十 3、方法法 它可以瞬间估计一个递推式算法复杂度。...T(n) = aT(n/b) + f (n) ,函数f(n),这个函数所代表意思是分解和合并步骤所花费时间 下图就是定理,记住就行,也可以自己去推导一蛤~ ?...图十一 PPT上这样说定理,一样 ? 图十二 ? 图十三 下面贴一段gray码问题分治解法 ---- ?

1K70

可能是最可爱一文读懂系列:皮卡丘の复杂度分析指南

部分4会重点分析递归算法,并介绍递归算法复杂度分析两种方法:“递归树法”和更通用简洁定理法”。最后,部分5会简要讨论,在实际情况中我们如何根据复杂度分析选择最好算法。...递归算法分析 主要有两种方法来分析递归关系复杂性: 1.使用递归树 2.定理方法 递归树分析 这是分析递归关系复杂性最直观方式。本质上,我们可以以递归形式可视化递归关系。...定理方法 我们研究了基于递归分析方法,以实现对递归进行渐进分析。但是,如前文所述,每次为了计算复杂度去绘制递归树是不可行。 归并排序递归只是将问题(数组)划分为两个子问题(子数组)。...这就是归并排序算法复杂度。如果我们在定理方法中采用归并排序递归关系,我们得到: ?...因此,时间复杂度等于在任何级别的工作量*所有级别数(或者是树高度)。 我们使用两种不同方法分析了归并排序算法时间复杂度,即递归树和定理法。

88750

通过一道面试题目,讲一讲递归算法时间复杂度

❝本篇通过一道面试题,一个面试场景,来好好分析一下如何递归算法时间复杂度。 通知:一些录友基础比较薄弱,不知道从哪里开始刷题。...如果对递归时间复杂度理解不够深入的话,就会这样! 那么我通过一道简单面试题,模拟面试场景,来带大家逐步分析递归算法时间复杂度,最后找出最优解,来看看同样是递归,怎么就写成了O(n)代码。...递归算法时间复杂度 当前这颗二叉树就是xn次方,n为16情况,n为16时候,进行了多少次乘法运算呢?...这么如果是xn次方,这个递归树有多少个节点呢,如下图所示:(m为深度,从0开始) ? 「时间复杂度忽略掉常数项-1之后,这个递归算法时间复杂度依然是O(n)」。...「本篇我用一道非常简单面试题目:xn次方,来逐步分析递归算法时间复杂度,注意不要一看到递归就想到了O(logn)!」

53030

搞定大厂算法面试之leetcode精讲2.时间空间复杂度

假设算法问题规模为n,那么操作单元数量便用函数f(n)来表示,随着数据规模n增大,算法执行时间增长率和f(n)增长率呈现一定关系,这称作为算法渐近时间复杂度,简称时间复杂度,记为 O(f(n...插入排序时间复杂度我们都说是O(n^2) ,但是插入排序时间复杂度和输入数据有很大关系,假如输入数据是完全有序,则插入排序时间复杂度是O(n),假如输入数据是完全倒序,则时间复杂度是O(n...二分查找时间复杂度是O(logn),每次二分数据规模减半,直到数据规模减少为 1,最后相当于2多少次方等于n,相当于分割了logn次。...树遍历复杂度一般是O(n),n是树节点个数,选择排序时间复杂度是O(n^2),我们会在对应章节逐步分析各个数据结构和算法复杂度。更多时间复杂度分析和推导可参阅定理。...一个时间复杂度分析例子 有一个字符串数组,将数组中每个字符串按照字母排序,然后在将整个字符串数组按照字典顺序排序。整个操作时间复杂度

42230

从辗转相除法到逆元,数论算法初体验

今天是算法和数据结构专题第22篇文章,我们一起来聊聊辗转相除法。 辗转相除法又名欧几里得算法,是最大公约数一种算法,英文缩写是gcd。...因为分解因数复杂度太高了,也很容易想明白,既然要分解因数,那么首先需要获得一定量质数吧。有了质数之后还要遍历质数,将整数一点一点分解,显然很麻烦,还不如直接暴力了。...辗转相除法 接下来就轮到正——辗转相除法出场了,这个算法在《九章算术》当中曾经出现过,叫做更相减损术。...这样我们就把a和bgcd转移成了b和r,然后我们可以继续转移,直到这两个数之间存在倍数关系时候就找到了答案。 在我们写代码之前,我们先来看一下这个定理证明。...以上就是欧几里得定理简单证明,如果看不懂也没有关系,我们记住这个定理内容就可以了。

1.5K20
领券