递归式--三种求解时间复杂度的方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

学无止境,笔勤不辍。很久没有更新算法专栏了…笔者终于找到时间来更新了。今天,笔者给大家分享一下三种求解递归式的时间复杂度的方法,希望能与大家一起学习进步!!!


简单补充一下 递归式的定义,递归式由两部分组成:1.结束条件 2.递归体
在这里插入图片描述
这个递归式的解是 T(n) = O(N *lg N)

一、代换法

先猜测有某个界存在,然后利用数学归纳法,证明猜想的正确性。
步骤:
1.猜测解的形式
2.用数学归纳法找出能让这个时间复杂度解有效的常数
下面给一个例子:

求T(n)=2T(⌊n/2⌋)+n 的时间复杂度
猜其解为T (n) = O(n lg n)
存在常数c使得T (n) ≤ cn lg n
假设⌊n/2⌋时式子成立,即 T(⌊n/2⌋)≤ c ⌊n/2⌋lg(⌊n/2⌋成立
此时,T(n)≤ 2(c ⌊n/2⌋lg(⌊n/2⌋)) + n
≤ cn lg(n/2) + n
=cn lg n - cn lg 2 + n
=cn lg n - cn + n
≤ cn lg n
当1≤ c时,最后一步成立,即证明成功
这里的lg是以2为底的
`不过这里要考虑一下边界条件,n>=2的时候是成立的,但是n=1时,是有问题的 因为 T(1)=1 but cn lg 1 = 0`

这里证明时,可能会遇到:是同一数量级,但是有低阶项多出,方法是:证明猜想时,减去一个低阶项。

二、递归树法

将递归式转换成树形结构,树中的节点代表在不同递归层次付出的代价,最后利用对和式限界的技术来解出递归式(最终求和求解)
递归树是一种得到好猜测的直接方法
通常可以容忍小量的不良量
给出例子:
求解 T (n) = 3T (⌊n/4⌋) + Θ(n2)
在这里插入图片描述
值得注意的是,该树的所有结点的和是T(n)
之后的证明运用代换法(数学归纳法)
递归树法是用来找寻一个近似的合适解的方法

三.主方法

给出递归形式T(n)=aT(n/b)+f(n)的界,其中a≥1,b>1,f(n)是给定的函数。通过定义求解递归式的可靠猜测解

设a ≥ 1 和 b > 1 是常数,设 f (n) 为一函数
T(n) = aT(n/b) + f(n)有这种形式
对非负整数,其中 n/b 指⌊n/b⌋ 或 ⌈n/b⌉。那么 T (n)
可能有如下的渐近界(近似解)

在这里插入图片描述
给出例子:

T (n) = T (2n/3) + 1
a = 1, b = 3/2, f (n) = 1
适合第二种情况,所以T(n) = Θ(lg n)

之后的证明运用代换法(数学归纳法)


总结

以上就是今天要讲的内容,本文粗略介绍了三种求递归式时间复杂度的方法,后续笔者会更改精修。今天的内容就分享到这里了,希望能给大家一些帮助,教室要关门了,笔者再不走就要被关起来了,后续笔者也会定期更新内容,坚持学习… 再重复一遍口号:学无止境,笔勤不辍!

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 时间复杂度求解取决于实际的算法,一般可以分析算法的执行步骤,统计每个步骤所用的时间,从而时间复杂度。对于递归算法,可以通过分析递归函数的执行次数,以及每次调用递归函数所消耗的时间,来求解时间复杂度。 ### 回答2: 要求解递归时间复杂度,我们可以按照以下步骤进行: 1. 首先,确定递归的形。递推通常具有递归的特点,即问题的规模需要通过不断缩小来递归求解。例如,递归可能包含递归调用,或者具有递归的结构。 2. 其次,推导递归递归深度。递归时间复杂度通常与递归的深度相关,即需要确定递归递归深度。 3. 然后,分析递归函数的时间代价。将递归的执行过程分解为不同的子问题,确定每个子问题的时间代价。这可能涉及到递归子问题的规模和计算时间。 4. 最后,通过递归的时间代价和递归递归深度来确定递归时间复杂度。 需要注意的是,递归时间复杂度可能与递归的规模有关,也可能与递归的深度有关,具体取决于具体的情况和问题的性质。同时,递归时间复杂度也可能需要通过数学推导或递归树等方法进行求解。 总的来说,求解递归时间复杂度需要通过对递归的分析、递归深度的确定以及递归函数的时间代价的分析来进行。 ### 回答3: 求解递归时间复杂度需要以下步骤: 1. 确定递归的形:首先,我们需要确定递归的形递归方程,即描述递归的基本操作和递归关系的数学等。这通常需要根据问题的特点和递归的实现进行分析。 2. 求解递归方程:接下来,我们需要求解递归方程,即找到递归的解析解。这可以通过代入法、特征根法或母函数法等数学方法来实现。在这一步骤中,我们可以得到递归的通项公,并进一步进行化简。 3. 分析递归时间复杂度:一旦我们得到递归的通项公,我们可以通过分析公的增长率来确定递归时间复杂度。具体来说,我们可以评估递归中的递归调用次数和每次递归操作的时间复杂度,然后将它们相乘得到最终的时间复杂度。 4. 解决递归的边界条件:最后,我们需要解决递归的边界条件,即递归的终止条件。这是因为递归只有在满足终止条件时才能收敛,否则递归会无限进行下去。在分析时间复杂度时,我们需要考虑递归的基本操作在边界条件下的执行次数和时间复杂度。 需要注意的是,求解递归时间复杂度可能涉及到数学推理和推导,需要运用到数学分析的方法。具体的求解过程会根据不同的递归和问题而有所不同。同时,我们也可以借助工具和数值计算对递归进行近似求解,以便更好地估计时间复杂度的上界和下界。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值