xy0v0's Blog

xy0v0's Blog

时间复杂度的分析基础

2025-02-10

思维导图

graph LR A[函数的增长] --> B[渐近符号体系] A --> C[时间复杂度分析] A --> D[递归算法复杂度计算] A --> E[应用举例] B --> B1[定义与用途] B1 --> B11["分析算法效率的数学工具"] B --> B2[符号分类] B2 --> B21["O (上界): ∃c,n₀>0, ∀n≥n₀, 0 ≤ f(n) ≤ cg(n)"] B2 --> B22["Ω (下界): ∃c,n₀>0, ∀n≥n₀, 0 ≤ cg(n) ≤ f(n)"] B2 --> B23["Θ (紧确界): 同时满足O和Ω"] B2 --> B24["o (非紧上界): limₙ→∞ f(n)/g(n)=0"] B2 --> B25["ω (非紧下界): limₙ→∞ f(n)/g(n)=∞"] C --> C1[分析原则] C1 --> C11["关注输入规模n→∞时的行为"] C1 --> C12["忽略低阶项与常数系数"] C --> C2[增长率比较] C2 --> C21["1 ≺ log n ≺ n ≺ n log n ≺ n² ≺ 2ⁿ"]

渐近符号体系

1. 核心符号定义

符号 数学定义 直观含义 典型用例
O (上界) ​∃c,n₀>0,∀n≥n₀,0 ≤ f(n) ≤ c·g(n) 算法的最坏时间复杂度 插入排序最坏情况 O(n²)
Ω (下界) ​∃c,n₀>0,∀n≥n₀,0 ≤ c·g(n) ≤ f(n) 算法的最低性能保证 比较排序下限 Ω(n logn)
Θ (紧确界) ​同时满足 O(g(n)) 和 Ω(g(n)) 算法的精确时间范围 归并排序 Θ(n logn)
o (非紧上界) ​limₙ→∞ f(n)/g(n) = 0 严格弱于上界 2n = o(n²)
ω (非紧下界) ​limₙ→∞ f(n)/g(n) = ∞ 严格强于下界 n² = ω(n logn)

2. 符号关系

graph LR O --> Θ Ω --> Θ o --> O ω --> Ω

时间复杂度分析

1. 三大基本原则

  1. 忽略常数因子:硬件差异会掩盖常数影响
  2. 关注最高阶项 :长期增长趋势由最高阶主导
  3. 考虑最坏情况:保证算法在任何输入下的性能下限

2. 常见函数增长率

1 \prec \log n \prec \sqrt{n} \prec n \prec n \log n \prec n^2 \prec 2^n

当 n=1,000,000 时

log2(n) ≈ 20      # 对数级
n = 1e6           # 线性级
n logn ≈ 20e6     # 线性对数级
n² = 1e12         # 平方级