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

递归关系:求解T(n-1)的大O

递归关系是一种描述问题解决方案的数学模型,它通常用于计算复杂度分析。递归关系是一种基于问题规模的递归定义,它描述了问题的解与其子问题的解之间的关系。在递归关系中,我们通常使用大O表示法来描述问题的解决方案的时间复杂度。

在这个问题中,我们需要求解T(n-1)的大O。假设T(n)表示问题的解决方案的时间复杂度,那么T(n-1)表示问题规模减小1的解决方案的时间复杂度。根据递归关系,我们可以得到以下公式:

T(n) = T(n-1) + O(n)

这个递归关系表示问题规模为n的解决方案的时间复杂度等于问题规模为n-1的解决方案的时间复杂度加上O(n)的时间复杂度。

为了求解T(n-1)的大O,我们可以使用主定理。主定理是一种用于计算复杂度分析的方法,它可以帮助我们找到递归关系的解。根据主定理,我们可以得到以下公式:

T(n) = O(f(n))

其中f(n)是一个函数,它描述了问题规模n的解决方案的时间复杂度。在这个问题中,我们需要求解T(n-1)的大O,因此我们可以将n-1代入上面的公式中,得到以下公式:

T(n-1) = O(f(n-1))

根据递归关系,我们可以得到以下公式:

T(n-1) = T(n-2) + O(n-1)

因此,我们可以得到以下公式:

O(f(n-1)) = O(f(n-2)) + O(n-1)

根据主定理,我们可以得到以下公式:

O(f(n-1)) = O(f(n-2)) + O(n-1) = O(f(n-3)) + O(n-2) + O(n-1) = ... = O(f(1)) + O(2) + O(3) + ... + O(n-1)

因此,我们可以得到以下公式:

T(n-1) = O(f(1)) + O(2) + O(3) + ... + O(n-1)

这个公式表示问题规模为n-1的解决方案的时间复杂度等于问题规模为1的解决方案的时间复杂度加上O(2)的时间复杂度加上O(3)的时间复杂度加上...加上O(n-1)的时间复杂度。

综上所述,递归关系是一种描述问题解决方案的数学模型,它可以帮助我们找到问题的解决方案的时间复杂度。在这个问题中,我们使用了主定理和递归关系来求解T(n-1)的大O,得到了以下公式:

T(n-1) = O(f(1)) + O(2) + O(3) + ... + O(n-1)

这个公式表示问题规模为n-1的解决方案的时间复杂度等于问题规模为1的解决方案的时间复杂度加上O(2)的时间复杂度加上O(3)的时间复杂度加上...加上O(n-1)的时间复杂度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

究竟为什么,快速排序时间复杂度是n*lg(n)? | 经典面试题

快速排序分为这么几步: 第一步,先做一次partition; partition使用第一个元素t=arr[low]为哨兵,把数组分成了两个半区: 左半区比t 右半区比t小 第二步,左半区递归; 第三步...,和输入数据量n呈线性关系。...对一个包含n个元素堆顶元素弹出后,调整成一个新堆,其时间复杂度也是O(lg(n))。 第二类:组合规则 通过简单规则时间复杂度,来求解组合规则时间复杂度。 例如:n个数冒泡排序。...第三类,递归求解 简单规则和组合规则可以用来求解递归算法时间复杂度。对于递归算法,该怎么分析呢? 接下来,通过几个案例,来说明如何通分析递归式,来分析递归算法时间复杂度。...总结 for循环时间复杂度往往是O(n) 树高度时间复杂度往往是O(lg(n)) 二分查找时间复杂度是O(lg(n)),快速排序时间复杂度n*(lg(n)) 递归求解,未来再问时间复杂度,通杀

1.5K30

拜托,面试别再问我时间复杂度了!!!

快速排序分为这么几步: 第一步,先做一次partition; partition使用第一个元素t=arr[low]为哨兵,把数组分成了两个半区: 左半区比t 右半区比t小 第二步,左半区递归; 第三步...,和输入数据量n呈线性关系。...对一个包含n个元素堆顶元素弹出后,调整成一个新堆,其时间复杂度也是O(lg(n))。 第二类:组合规则 通过简单规则时间复杂度,来求解组合规则时间复杂度。 例如:n个数冒泡排序。...最内层swap 故,冒泡排序时间复杂度为: O(n) * O(n) * O(1) = O(n^2) 又例如:TopK问题,通过建立k元素堆,来从n个数中求解最大k个数。...第三类,递归求解 简单规则和组合规则可以用来求解递归算法时间复杂度。对于递归算法,该怎么分析呢? 接下来,通过几个案例,来说明如何通分析递归式,来分析递归算法时间复杂度。

21730
  • 递归算法时间复杂度分析

    例如在调用归并排序mergeSort(a,0,n-1)对数组a[0…n−1]a[0…n−1]排序时,执行时间T(n)T(n)递推关系式为: T(n)={O(1),2T(n2)+O(n),当n=1当n>...比如mergeSort(a,0,n-1)运行时间实际递归式应该是: T(n)={O(1),T(⌈n2⌉)+T(⌊n2⌋)+O(n),当n=1当n>=2T(n)={O(1),当n=1T(⌈n2⌉)+T...(这里省略快速排序算法平均复杂度T(n)求解过程) 小结:上面6种递推关系是高中、本科知识,在此重点介绍了迭代法,其它几种方法虽未在本篇中使用,但可以加深对递推式求解认识。...这种递归方程是分治法时间复杂性所满足递归关系,即一个规模为n问题被分成规模均为n/ba个子问题,递归求解这a个子问题,然后通过对这a个子问题综合,得到原问题解。...这里我们只考虑最长常见递归形式,形如:T(n)=c1T(n-1)+c2T(n-2)+c3T(n-3)+…+ckT(n-k)+f(n),其中c1,c2,…ck为常数且不等于0;我们对该方程求解如下:

    2.4K20

    快排查找数组中第K个最大元素

    时间复杂度 归并排序涉及递归,分析稍有点复杂。 递归适用场景 一个问题A可分解为多个子问题B、C,则求解问题A即可分解为求解问题B、C。问题BC解决后,再把BC结果合并成A结果。...若定义求解问题A时间是T(A),可得递推关系式: T(A) = T(B) + T(C) + P P = 子问题BC结果合并成问题A结果所消耗时间 可见递归求解问题可写成递推公式,递归代码时间复杂度也可写成递推公式...可得 当 =》 =》 将k值代入上面公式=》 用O标记法表示: 所以归并排序时间复杂度是 。...递归时间复杂度求解除了递推公式之外,还有递归树: T(n)在大部分情况下时间复杂度都能做到 ,只在极端情况下,才会退化到 。有很多方法将这个概率降到很低。...解答 快排核心思想就是分治和分区,可利用分区思想:O(n)时间复杂度内求无序数组中第K大元素。 如,4, 2, 5, 12, 3这样一组数据,第3元素就是4。

    4.1K10

    青蛙跳台阶问题暨斐波那契数列

    斐波那契数列(Fibonacci Sequence),又称黄金分割数列,因为当n趋于无穷时,前一个数与后一个数比值无限接近于黄金比例(√5−12\frac{√5-1}{2}无理数,0.618…)。...1)+fib(n-2); } 3.1时间复杂度分析 以递归实现斐波那契数,效率是非常低下,因为对子问题求解fib(n-1)和fib(n-2)两者存在重叠部分,对重叠部分重复计算造成了浪费。...但递归求解其优点也是显而易见,代码简单,容易理解。...那么上面求得算法时间复杂度是归于哪个级别。很明显是O(2n)O(2^n)。也就是说斐波那契数列递归求解算法时间复杂度是O(2n)O(2^n )。...关于斐波那契数列递归 求解期间复杂度我们简化其求解过程,按照如下方式求解。 image.png 递归时间复杂度是: 递归次数*每次递归中执行基本操作次数。

    1.1K22

    青蛙跳台阶

    1)+fib(n-2); } 5.1 时间复杂度 以递归实现斐波那契数,效率是非常低下,因为对子问题求解 fib(n-1) 和 fib(n-2) 两者存在重叠部分,对重叠部分重复计算造成了浪费...但递归求解其优点也是显而易见,代码简单,容易理解。...那么上面求得算法时间复杂度是归于哪个级别。很明显是 O(2^n) 。也就是说斐波那契数列递归求解算法时间复杂度是 O(2^n ) 。...关于斐波那契数列递归求解期间复杂度我们简化其求解过程,按照如下方式求解递归时间复杂度是:递归次数*每次递归中执行基本操作次数。所以时间复杂度是: O(2^n) 。...,所以斐波那契数列递归实现空间复杂度是 O(n)。

    95520

    数据结构算法时间复杂度_数据结构中排序时间复杂度

    这样能够简化算法分析,并且使注意力集中在最重要一点上:增长率。 用Ο记号表示算法时间性能   将基本语句执行次数数量级放入Ο记号中。 如何推导o阶呢?...按照上面推导“O阶”步骤,我们来看 第一步:“用常数 1 取代运行时间中所有加法常数”, 则上面的算式变为:执行总次数 =3n^2 + 3n + 1 (直接相加的话,应该是T(n) =...: T(n) = 2n^3+3n^2+2n+1; 利用O表示法,该算法时间复杂度为O(n^3)。...(n-1, b, a, c); //递归n-1次 } } 对于递归函数分析,跟设计递归函数一样,要先考虑基情况(比如hanoi中n==1时候),这样把一个大问题划分为多个子问题求解。...故此上述算法时间复杂度递归关系如下: 常用排序算法时间复杂度

    85910

    动态规划怎么用?

    分治法则是把一个问题划分成一些独立子问题,递归求解子问题情况;贪心算法则是会先选择当时看起来是最优选择,然后再求解一个结果子问题 如何使用动态规划 image.png fib(n):...if n<=2:f=1; else: f= fib(n-1)+fib(n-2); return f; 复制代码 可以简要分析下这个执行过程:要去求解 fib(n),首先要知道fib...对于DAG: image.png indegree(t):入度数也就是类似(u,t)边数量,需要去遍历所有t入边 O(1):判断是不是有入边 总共执行时间为 image.png...* 每个子问题处理所需要时间 总的来说就是:尝试所有可能子问题结果,将最好可能子结果存储下来,然后重复利用已经解决子问题,递归去解决所有的问题(思考+记忆+递归) 一定要用动态规划吗?...(i,tempV); return tempV; } 复制代码 分析可以看到,它执行为需要遍历一遍整个数组,然后要去计算子问题包括 n-1,n-2,..,1,耗时为 O(n+

    2.6K30

    编程实现“斐波那契数列”5种方法! | 经典面试题

    一、递归法 伪代码: uint32_t f(uint32_t n){ if(n==0) return 0; if(n==1) return 1; return f(n-1)+f(...>=2时 可以看出,每一个新f(n),是前两个旧f(n-1)和f(n-2)之和,一路递归下去,最终都将递归到f(0)和f(1)上来。...那么,带入通项公式求解,时间复杂度是多少呢?是O(1)么? 通项公式计算,并不能O(1)得到,而是一个a^n,即power(a, n)求解过程。 那么,如何求解an次方呢?...result *=a; } return result; } 很容易知道,a通过for循环不断自乘,求解a^n时间复杂度是O(n)。...通过“正推”法,求解f(n)时间复杂度是O(n)。 楼主搞了这么久奇技淫巧,搞什么“通项公式法”,结果也是个O(n)方法???

    2.4K20

    快速排序

    2 核心思想分治,顾名思义,就是分而治之,将一个问题分解成 n 个规模较小,且结构与原问题相似的子问题,递归地解决这些子问题后,然后再合并其结果,就得到原问题解。...n; n>1递归公式求解比较复杂,我们也可以根据递归树来求解。...最坏情况序列本身是有序,划分后两个序列分别包含 0 个元素和 n-1 个元素,时间复杂度为 O(n^2),递推公式如下:T(1) = C; n = 1 时,只需要常量级执行T(n) = T(n-...平均时间复杂度假设每次分区操作都将区间分成 9:1 两个小区间,时间复杂度为 O(nlogn),递归公式变成如下:T(1) = C; n = 1 时,只需要常量级执行T(n) = T(n/10)...最坏情况需要进行 n-1递归,每次递归中只使用了常数空间,空间复杂度为 O(n)平均空间复杂度O(logn)

    15420

    【数据结构与算法】递归

    推导出递推关系,即父问题与子问题关系,以及递归结束条件 例如之前遍历链表递推关系为 f(n) = \begin{cases} 停止& n = null \\ f(n.next) & n \neq...汉诺塔[^13](多路递归) Tower of Hanoi,是一个源于印度古老传说:梵天创建世界时做了三根金刚石柱,在一根柱子从下往上按大小顺序摞着 64 片黄金圆盘,梵天命令婆罗门把圆盘重新摆放在另一根柱子上...(n) = 2T(\frac{n}{2}) + n 此时 x=1=c ,时间复杂度 \Theta(n\log{n}) 情况2 - 分区没分好 T(n) = T(n-1) + T(1) + n 此时不能用主定理求解...7) 递归时间复杂度-展开求解 像下面的递归式,都不能用主定理求解 例1 - 递归求和 long sum(long n) { if (n == 1) { return 1;...= T(1) + 2 + ... + n = T(1) + (n-1)\frac{2+n}{2} = c + \frac{n^2}{2} + \frac{n}{2} -1 时间复杂度 O(n^2)

    14810

    3.算法设计与分析__分治法

    (2)求解子问题:各子问题解法与原问题解法通常是相同,可以用递归方法求解各个子问题,有时递归处理也可以用循环来实现。...递归函数经典问题——汉诺塔问题 在世界刚被创建时候有一座钻石宝塔(塔A),其上有64个金碟。所有碟子按从到小次序从塔底堆放至塔顶。紧挨着这座塔有另外两个钻石宝塔(塔B和塔C)。...≤4(2T(n/8)+n/4)+2n=8T(n/8)+3n … … … ≤nT(1)+nlog2n=O(nlog2n) 因此,时间复杂度为O(nlog2n)。...此时,必须经过n-1递归调用才能把所有记录定位,而且第i趟划分需要经过n-i次关键码比较才能找到第i个记录基准位置,因此,总比较次数为: 因此,时间复杂度为O(n2)。...; 算法设计关键在于寻找这4部分元素之间对应关系

    75720

    写给小白看递归(硬核)

    =(n-1)*(n-2)*……*1 通过观察就能知道n阶乘和n-1阶乘有这样关系: n!=n!=n*(n-1)!...所以,我们要求n阶乘,我们知道n-1阶乘乘以n就可以得到,这就是最核心关系。...递归,其实就是要找上下层关系,n个盘子从A挪到C和n-1个盘子从A挪到C有啥联系(hannuo(n)—>hannuo(n-1)有啥关系)。下面带你一步步分析。...在递归求F(4)时候,F(4)递归求解F(3),但是右侧还会再执行一遍。如果是数量非常数,那么将耗费很大时间。所以我们就可以采取记忆化!...分治算法:将问题分解成多个子问题,子问题求解完合并得到结果,这个过程可以使用递归实现(也可能不使用递归),但大部分会用递归因为实现更加简洁,它和斐波那契递归不同是它分裂子问题一般没有重复(即分完为止而不会重复计算

    43220

    告别递归,从零开始一文学会递归解题

    前言 递归是算法中一种非常重要思想,应用也很广,小到阶乘,再在工作中用到比如统计文件夹大小,到 Google PageRank 算法都能看到,也是面试官很喜欢考点 最近看了不少递归文章...递归算法通用解决思路 实战演练(从初级到高阶) 力争让大家对递归认知能上一个新台阶,特别会对递归精华:时间复杂度作详细剖析,会给大家总结一套很通用求解递归时间复杂度套路,相信你看完肯定会有收获...O(n), 但由于我们用了一个键值对来保存中间计算结果,所以空间复杂度是 O(n)。...最坏情况,如果此二叉树是如图所示(只有左节点,没有右节点),则树高度即结点个数 n,此时空间复杂度为 O(n),总的来看,空间复杂度为O(n) ?...return 0; }else{ return bCell(n-1); } } 只要思路对了,将递推公式转成代码就简单多了,另一方面也告诉我们,可能一时递归关系我们看不出来

    62310

    超全递归技巧整理,这次一起拿下递归

    不要去想一层层调用关系,不要试图用人脑分解递归每个步骤,屏蔽掉这些细节。 1.3....最长路径层次应该是 n 层,最短路径层次差不多是 2/n 层。因此,最大时间复杂度为 O(2^n-1),最小时间复杂度为 O(2^(n/2)-1)。...因此这就满足了递归前两个条件,即原问题求解可以分解对成 n 个子问题求解,并且对于这 n 个子问题求解方式与原问题求解方式一模一样,只是数据规模不同。最后是否满足递归最后一个条件呢?...解决完之后,我再解决其中一个子问题过程。其实,我们在画上面的递归树时,采用比较 nice 方式也是这样。 碎碎念,来自同一位佬说也结合了自己理解。...另外在数据规模情况下请使用非递归代码,使用递归代码很容易造成栈溢出。

    1.3K20

    大学课程 | 《算法分析与设计》笔记

    如果存在正常数C和自然数N0,使得当N≥N0时有f(N)≤Cg(N),则称函数f(N)当N充分时上有界,且g(N)是它一个上界,记为f(N)=O(g(N))。...(Cf(N))=O(f(N)),其中C是一个正常数 f=O(f) 第二章 递归与分治策略 2.1 递归概念 直接或间接地调用自身算法称为递归算法。...(n-1,a,c,b) move(a,b) hanoi(n-1,c,b,a) 递归算法优点:结构清晰,可读性强,容易用数学归纳法来证明算法正确 递归算法缺点:运行效率低...),最坏情况下时间复杂度是O(n^2) 2.9 线性时间选择 找出一组数中,第X(小)数 采用了随机划分算法 2.10 最近点对问题 时间复杂度分析O(nlogn) PYTHON """ Copyright...I+1中状态通过状态转移方程得来,与其他状态没有关系,特别是与未发生状态没有关系 动态规划算法有一个变形方法——备忘录方法,这种方法不同于动态规划算法“自底向上”填充方向,而是“自顶向下”递归方向

    96930

    C++不知算法系列之集结基础算法思想

    算法性能分析: 可以使用时间复杂度和空间复杂度评价算法性能高低。2 者均通过大O表示描述, O 时间复杂度实际上不具体表示真正执行时间,而是表示代码执行时间随数据规模增长变化趋势。...时间复杂度:指算法需要消耗时间资源。使用O法计算时间复杂度原则: 只关注循环执行次数最多一段代码,省去最高阶项前面的常量、低阶、系数。 如果运行时间是常数量级,则用常数1表示。...常见空间复杂度: 常量空间:当算法存储空间大小固定,和输入规模没有直接关系时,空间复杂度记作O(1)。...二维空间:当算法分配空间是一个二维数组集合,并且集合长度和宽度都与输入规模n成正比时,空间复杂度记作O(n^2) 递归空间:计算机在执行递归程序时,会专门分配一块内存,用来存储“方法调用栈”执行递归操作所需要内存空间和递归深度成正比...如果递归深度是n,那么空间复杂度就是O(n)。纯粹递归操作空间复杂度也是线性。 2. 常见算法思想 2.1 穷举算法思想 穷举算法也称为枚举算法或暴力破解法,是一种原始算法。

    39621

    一文学会递归解题

    前言 递归是算法中一种非常重要思想,应用也很广,小到阶乘,再在工作中用到比如统计文件夹大小,到 Google PageRank 算法都能看到,也是面试官很喜欢考点 最近看了不少递归文章,收获不小...递归算法通用解决思路 实战演练(从初级到高阶) 力争让大家对递归认知能上一个新台阶,特别会对递归精华:时间复杂度作详细剖析,会给大家总结一套很通用求解递归时间复杂度套路,相信你看完肯定会有收获...O(n), 但由于我们用了一个键值对来保存中间计算结果,所以空间复杂度是 O(n)。...最坏情况,如果此二叉树是如图所示(只有左节点,没有右节点),则树高度即结点个数 n,此时空间复杂度为 O(n),总的来看,空间复杂度为O(n) ?...return 0; }else{ return bCell(n-1); } } 只要思路对了,将递推公式转成代码就简单多了,另一方面也告诉我们,可能一时递归关系我们看不出来

    46320

    数据结构与算法:递归算法

    1); } 在上面的示例中,定义了 n < = 1 基本情况,并且可以通过将数字转换为较小值来求解较大值,直到达到基本情况。...使用递归解决实际问题并了解其基本工作原理 问题 1: 编写一个递归关系程序来查找 n 斐波那契数列,其中 n>2 。...数学方程: 如果 n == 0,n == 1;输出:0, 1 否则: fib(n) = fib(n-1) + fib(n-2) 递归关系T(n) = T(n-1) + T(n-2) + O(1)...给定程序时间复杂度取决于函数调用。 对于最好情况: T(n) = θ(2^n\2) **问题 2:**编写一个程序和递归关系来查找 n 阶乘,其中 n>2 。...数学方程: 如果 n == 0 或 n == 1,则为 1; f(n) = n*f(n-1) 如果 n> 1; 递归关系T(n) = 1(n = 0) T(n) = 1 + T(n-1)(n >

    16110
    领券