复杂度分析

官官方信息技术老师·7 页·深入(追求细节与边界)·0 次浏览·33 天前
信息技术大学

复杂度分析

数据结构与算法·面试高频 · 第 1 章 复杂度与线性结构

按 空格/→ 演示下一步

问一句
1 / 7 页

全部页面点击任意一页,跳回舞台从这页播放

信息技术大学

复杂度分析

数据结构与算法·面试高频 · 第 1 章 复杂度与线性结构

1第 1 页 · 复杂度分析

大 O 记号与推导

大 O 只看增长趋势:忽略常数与低阶项,问的是「数据翻倍,耗时怎么涨」。

定义
增长率上界,取最高阶项、忽略系数
推导法
循环嵌套相乘,顺序执行取最大者
常见坑
藏在函数调用与切片拷贝里的隐性开销
2第 2 页 · 大 O 记号与推导

常见复杂度量级对比

从 O(1) 到 O(n!):对数与线性是朋友,指数与阶乘是敌人。

O(1)/O(log n)
哈希查找、二分定位,数据翻倍只多一步
O(n)/O(n log n)
遍历与高效排序,可接受的主力区间
O(2^n) 起
子集枚举起步,n 到 20 就要报警
3第 3 页 · 常见复杂度量级对比

递归复杂度与主定理

递归成本 = 子问题数 × 规模 ÷ 分割比 + 每层开销:主定理一个公式定调。

递归式
T(n)=aT(n/b)+f(n):a 路递归,规模切 1/b
主定理
比较 f(n) 与 n^log_b a,谁占大头听谁的
套例
归并排序 a=2、b=2、f(n)=n 同阶,O(n log n)
4第 4 页 · 递归复杂度与主定理

均摊分析

一次贵不等于次次贵:动态扩容的插入,均摊到每次仍是 O(1)。

均摊
偶尔的昂贵操作摊到一整串操作上
典型
动态数组扩容、双栈实现队列的摊还
5第 5 页 · 均摊分析

本节要点

  • ✓大 O 看趋势,忽略常数低阶项
  • ✓n log n 是排序门槛,2^n 要报警
  • ✓主定理:比 f(n) 与 n^log_b a
  • ✓均摊:偶尔贵,次次平
延伸主题:给老代码估复杂度推一遍快排期望复杂度
6第 6 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1O(n log n) 与 O(n²) 在 n=100 万时差多少量级?

参考答案n log n 约两千万次操作,毫秒到几十毫秒级;n² 是万亿级,分钟起步。数据规模一大,多项式阶的一层之差就是可用与不可用的分界。

2为什么说「均摊 O(1)」不是安慰剂?

参考答案扩容单次 O(n),但 n 次插入才触发一次,总成本 O(n),严格按操作序列均摊每次 O(1);且任何输入序列都无法让它每次都扩容,这是证明不是概率。

3递归树与主定理什么关系?主定理失效怎么办?

参考答案主定理是递归树逐层求和的快捷公式,只覆盖 f(n) 与子问题项可比的几种情形;不可比时画递归树逐层求和,或用数学归纳代入验证,慢但通用。

7第 7 页 · 课后思考