当前位置: 首页 > article >正文

【算法】Master Theorem 计算递归算法的时间复杂度

目录

  • 前言
  • Master Theorem
  • 递归求区间的最大值


前言


递归算法非常常见,那怎么计算递归的时间复杂度呢?


Master Theorem


master公式 : T(n)=a*T(n/b)+O(n^c) , a、b、c 都是常数

在这里插入图片描述

注意:只有所有子问题规模相同的递归才能用master公式计算时间复杂强度
如果log(b,a)<c,复杂度为:O(n^c)
如果log(b,a)>c,复杂度为:O(n^log(b,a))
总结为:log(a,b)和c哪个更大,哪个作为n的指数
如果log(b,a)=c,复杂度为:O(n^c * logn)
(这个特殊一点)

补充:
T(n)=2 * T(n/2)+O(n*logn),时间复杂度是O(n * ((logn)的平方)),证明过程略,知道即可




举个例子来计算一下递归的时间复杂度

递归求区间的最大值

简单实现一下:

# 递归求[l,r]区间最大值
def getMax(l, r):
    if l == r:
        return a[l]
    mid = (l + r) // 2
    return max(getMax(l, mid), getMax(mid + 1, r))


n = int(input())
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(getMax(0, n - 1))

可以发现:
这个递归实现可以表示为:
T(n)=2T(n/2)+O(1)
根据:T(n)=a
T(n/b)+O(n^c) 易得a=2,b=2,c=0
log(a,b)=1>c , 所以时间复杂度为O(n)


END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢


http://www.kler.cn/a/522642.html

相关文章:

  • 消息队列篇--通信协议篇--应用层协议和传输层协议理解
  • 登录授权流程
  • 使用kitty terminal遇到的‘xterm-kitty‘: unknown terminal type.
  • uniapp 地图添加,删除,编辑标记,在地图中根据屏幕范围中呈现标记
  • 智能调度体系与自动驾驶技术优化运输配送效率的研究——兼论开源AI智能名片2+1链动模式S2B2C商城小程序的应用潜力
  • 【深度学习入门_机器学习理论】K近邻法(KNN)
  • Baklib如何优化企业知识管理实现全面数字化升级与协同创新
  • K8S中高级存储之PV和PVC
  • 【嵌入式】总结——Qt开发(四)
  • java后端之登录认证
  • C# 添加、替换、提取、或删除Excel中的图片
  • C语言练习(28)
  • maven的打包插件如何使用
  • CNN-GRU卷积门控循环单元时间序列预测(Matlab完整源码和数据)
  • 在做题中学习(81):替换后的重复字符
  • L30.【LeetCode题解】丢失的数字
  • 【无标题】TensorFlow、PyTorch、ONNX、TensorRT
  • 认知计算与 AI 大模型:数据仓库、数据湖与数据分析的变革力量
  • 《SwinIR:使用Swin-Transformer图像恢复》学习笔记
  • 深度解析:基于Vue 3与Element Plus的学校管理系统技术实现
  • LVGL+FreeRTOS实战项目:智能健康助手(lcd篇)
  • Java学习笔记(二十五)
  • Python面向对象编程实战:构建强大的 `Person` 类
  • CSS知识总结
  • zookeeper-3.8.3-基于ACL的访问控制
  • 私域流量池构建与转化策略:以开源链动2+1模式AI智能名片S2B2C商城小程序为例