首页
学习
活动
专区
工具
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个数。...第三大类,递归求解 简单规则和组合规则可以用来求解非递归的算法的时间复杂度。对于递归的算法,该怎么分析呢? 接下来,通过几个案例,来说明如何通分析递归式,来分析递归算法的时间复杂度。

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

    例如在调用归并排序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/b的a个子问题,递归地求解这a个子问题,然后通过对这a个子问题的解的综合,得到原问题的解。...这里我们只考虑最长常见的递归形式,形如:T(n)=c1T(n-1)+c2T(n-2)+c3T(n-3)+…+ckT(n-k)+f(n),其中c1,c2,…ck为常数且不等于0;我们对该方程的求解如下:

    2.6K20

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

    斐波那契数列(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

    快排查找数组中的第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

    青蛙跳台阶

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

    95820

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

    这样能够简化算法分析,并且使注意力集中在最重要的一点上:增长率。 用大Ο记号表示算法的时间性能   将基本语句执行次数的数量级放入大Ο记号中。 如何推导大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时候),这样把一个大问题划分为多个子问题的求解。...故此上述算法的时间复杂度的递归关系如下: 常用排序算法时间复杂度

    1K10

    动态规划怎么用?

    分治法则是把一个大的问题划分成一些独立的子问题,递归求解子问题的情况;贪心算法则是会先选择当时看起来是最优的选择,然后再求解一个结果的子问题 如何使用动态规划 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)的求解过程。 那么,如何求解a的n次方呢?...result *=a; } return result; } 很容易知道,a通过for循环不断自乘,求解a^n的时间复杂度是O(n)。...通过“正推”法,求解f(n)的时间复杂度是O(n)。 楼主搞了这么久的奇技淫巧,搞什么“通项公式法”,结果也是个O(n)的方法???

    2.6K20

    快速排序

    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)

    15920

    【数据结构与算法】递归

    推导出递推关系,即父问题与子问题的关系,以及递归的结束条件 例如之前遍历链表的递推关系为 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)

    16010

    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部分元素之间的对应关系。

    77921

    写给小白看的递归(硬核)

    =(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),但是右侧的还会再执行一遍。如果是数量非常大的数,那么将耗费很大的时间。所以我们就可以采取记忆化!...分治算法:将问题分解成多个子问题,子问题求解完合并得到结果,这个过程可以使用递归实现(也可能不使用递归),但大部分会用递归因为实现更加简洁,它和斐波那契递归不同的是它分裂的子问题一般没有重复的(即分完为止而不会重复计算

    44420

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

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

    62810

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

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

    1.3K20

    一文学会递归解题

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

    46920

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

    如果存在正的常数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中的状态通过状态转移方程得来,与其他状态没有关系,特别是与未发生的状态没有关系 动态规划算法有一个变形方法——备忘录方法,这种方法不同于动态规划算法“自底向上”的填充方向,而是“自顶向下”的递归方向

    1.1K30

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

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

    40121

    谈谈算法的基本思想

    其一般步骤为: 1.将问题的实例划分为同一个问题的几个较小规模的实例。子问题最好拥有相同的规模。 2.对足够小的子问题实例求解。(一般使用递归方法) 3.将子问题的解合并,得到原问题的结。...二路归并排序是分治技术的一个完美例子 它把一个需要排序的数组A[0,..n-1]一分为二:A[0,..n/2-1]和A[n/2,..n-1],并对每个子数组进行递归排序,然后把这两个排序好的子数组组合为一个有序数组...,并利用这种关系,从顶而下(递归地)或从底而上(非递归地)解决问题。...利用减治法的一个典型算法就是折半查找(BinarySearch)。它搜索一个排序好的数组,将查找目标与数组的中间位置的元素相比,比它大则递归查找数组的左边,反之亦然。...一般来说,这样的子问题出现在求解给定问题的递推关系中,这个递推关系中包含了相同类型的更小子问题。动态规划并不对子问题一次又一次的求解,而是只解一次并把结果记录在表中。

    6910
    领券