news 2026/8/28 5:08:47

时间复杂度分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
时间复杂度分析

1. 引言

递归算法的时间复杂度通常用递归式表示。本文介绍三种分析递归式的工具:递归树法、主定理与 Akra-Bazzi 定理,并通过实例帮助读者掌握递归复杂度的分析方法。

2. 时间复杂度基础

2.1 什么是时间复杂度

时间复杂度描述算法执行时间随输入规模增长的变化趋势,常用大 O 记号表示上界。常见复杂度从低到高:O(1)O(1)O(1)O(log⁡n)O(\log n)O(logn)O(n)O(n)O(n)O(nlog⁡n)O(n \log n)O(nlogn)O(n2)O(n^2)O(n2)O(2n)O(2^n)O(2n)

下面列出常见算法的时间复杂度,便于对照记忆:

递归算法的时间复杂度用递归式表示,如归并排序:

T(n)=2T(n/2)+O(n) T(n) = 2T(n/2) + O(n)T(n)=2T(n/2)+O(n)

含义:解决规模为nnn的问题,需解决 2 个规模为n/2n/2n/2的子问题,再加上合并所需的O(n)O(n)O(n)时间。

3. 递归树法

3.1 基本思想

递归树法把递归式的展开过程画成一棵树,每个节点代表一个子问题的开销,把所有层开销累加即得总复杂度。以归并排序为例:

T(n)=2T(n/2)+O(n) T(n) = 2T(n/2) + O(n)T(n)=2T(n/2)+O(n)

递归树如下:

n / \ n/2 n/2 / \ / \ n/4 n/4 n/4 n/4

每层开销都是nnn,树高为log⁡2n\log_2 nlog2n,因此总复杂度为Θ(nlog⁡n)\Theta(n \log n)Θ(nlogn)

3.2 递归树法的步骤

  1. 展开递归式:把每层的分解与合并开销写在节点上。
  2. 计算每层总开销:将同一层所有节点开销相加。
  3. 确定树高:子问题规模从 n 缩小到常数所需的层数。
  4. 累加所有层:将各层开销求和。

3.3 递归树法示例

示例一:二分查找

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

每层只有一个节点,开销为O(1)O(1)O(1),树高为log⁡2n\log_2 nlog2n,因此T(n)=Θ(log⁡n)T(n) = \Theta(\log n)T(n)=Θ(logn)

示例二:子问题规模不等

T(n)=T(n/3)+T(2n/3)+O(n) T(n) = T(n/3) + T(2n/3) + O(n)T(n)=T(n/3)+T(2n/3)+O(n)

每层总开销为nnn,树高由最长路径决定,为log⁡3/2(n)\log_{3/2}(n)log3/2(n),因此T(n)=Θ(nlog⁡n)T(n) = \Theta(n \log n)T(n)=Θ(nlogn)

递归树法直观但不够严谨,更严格的证明通常借助主定理或 Akra-Bazzi 定理。

4. 主定理(Master Theorem)

4.1 主定理的适用条件

主定理适用于形如下式的递归式:

T(n)=aT(n/b)+f(n) T(n) = aT(n/b) + f(n)T(n)=aT(n/b)+f(n)

其中 a ≥ 1 为子问题个数,b > 1 为规模缩减比例,f(n) 为分解与合并的开销。

4.2 主定理的三种情况

主定理通过比较f(n)f(n)f(n)nlog⁡ban^{\log_b a}nlogba的渐近大小关系划分三种情况。
情况一:递归主导

f(n)=O(nlog⁡ba−ε)f(n) = O(n^{\log_b a - \varepsilon})f(n)=O(nlogbaε)ε>0\varepsilon > 0ε>0)时:

T(n)=Θ(nlog⁡ba) T(n) = \Theta(n^{\log_b a})T(n)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/28 5:05:55

数据安全到底怎么做?权限、脱敏、水印、防泄漏、审计全讲明白

很多企业一提数据安全,第一反应都是:把权限管严一点。财务只能看财务数据,销售只能看销售数据,核心报表只给管理层开放。但真正做过数据平台以后就会发现,数据安全远比“谁能看”复杂。一个销售经理有权限查看客户数据…

作者头像 李华
网站建设 2026/8/28 5:05:04

开源BI v7核心能力解析:AI辅助分析、SSO与RLS实践指南

过去几年,团队在做内部数据分析平台时,最大的痛点不是 SQL 写不出来,而是报表工具的授权成本、数据权限管控和上手门槛三座大山一直压着。商业 BI 功能虽全,但 License 费用不低,而且行级权限、单点登录这些能力往往需…

作者头像 李华
网站建设 2026/8/28 5:04:24

PaddleOCR-v3模型ONNXRuntime部署实战:C++/Python跨平台推理优化

简介:ONNX(Open Neural Network Exchange)作为一种开放的模型格式,实现了不同深度学习框架间模型的互操作性。其核心原理在于定义了一套通用的计算图表示标准,使得训练好的模型可以脱离原生框架,在统一的运…

作者头像 李华
网站建设 2026/8/28 5:03:22

宽范围输入DC-DC电源模块设计实战:6W与10W方案选型、验证与整改

宽输入范围的小功率电源模块,一直是工业设计里最不性感但又最绕不开的环节。最近把两款占位相近、规格互补的DC-DC方案从头到尾做了完整的选型、验证和整改,一款是6W、一款是10W,输入范围都是4:1,今天把过程里踩过的坑和沉淀下来的…

作者头像 李华
网站建设 2026/8/28 5:01:51

LSTM时间序列预测工程化实践:从数据清洗到API部署

简介:时间序列预测是工业智能、能源调度与电商运营中的核心基础能力,其本质是在有限历史中建模动态演化规律。LSTM凭借门控机制实现选择性记忆,在中短期(24–72小时)预测任务中兼顾记忆深度、计算效率与物理可解释性。…

作者头像 李华
网站建设 2026/8/28 5:00:51

RepairFormer:基于Transformer的JSON/YAML等结构化输入自动修复实战

RepairFormer 是面向结构化输入的自动化修复方向的一种命名:当 JSON、YAML、XML 或配置文本因为少逗号、引号未闭合、字段拼错、内容被截断而无法解析时,不再靠手写正则逐一补救,而是用 Transformer 学习“坏输入 -> 好输入”的映射。这正…

作者头像 李华