公式法求递归算法的时间复杂度

本文介绍使用公式法计算递归函数的时间复杂度,详细解析了递归函数T(n)=a⋅T(nb)+f(n)的计算方法,并讨论了递归部分与f(n)之间的三种关系,帮助理解不同情况下整体时间复杂度的确定。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

公式法可以说是计算递归函数复杂度最方便的工具,当递归函数的时间执行函数满足如下的关系式时,我们可以利用公式法:
T(n)=a⋅T(nb)+f(n)T(n)=a \cdot T\left(\frac{n}{b}\right)+f(n)T(n)=aT(bn)+f(n) 其中,f(n)是每次递归完毕之后额外的计算执行时间。例如,在归并排序中,每次递归处理完两边的数组后,我们需要执行合并的操作,那么这个操作的执行时间就是 f(n)。

当参数 a、b 都确定的时候,光看递归的部分,它的时间复杂度就是:O(nlog⁡ba)O\left(n^{\log _{b} a}\right)O(nlogba)

由于时间复杂度求的是上界(upper bound),通过对比递归部分的时间复杂度和 f(n) 的大小关系,得出最后的整体时间复杂度。牢记以下三种情况和相应公式:

  1. 当递归部分的执行时间O(nlog⁡ba)>f(n)O\left(n^{\log _{b} a}\right)>f(n)O(nlogba)>f(n)的时候,最终的时间复杂度就是 O(nlog⁡ba)O\left(n^{\log _{b} a}\right)O(nlogba)
  2. 当递归部分的执行时间O(nlog⁡ba)<f(n)O\left(n^{\log _{b} a}\right)<f(n)O(nlogba)<f(n)的时候,最终的时间复杂度就是 f(n)f(n)f(n)
  3. 当递归部分的执行时间O(nlog⁡ba)=f(n)O\left(n^{\log _{b} a}\right)=f(n)O(nlogba)=f(n)的时候,最终的时间复杂度就是 O(nlog⁡ba)lognO\left(n^{\log _{b} a}\right)lognO(nlogba)logn

举例1
在这里插入图片描述
在这里插入图片描述

参考: 课程《300分钟搞定数据结构与算法》

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值