Evanalysis
2.1有来源支持嵌入式互动预计阅读时间: 1 分钟

2.1 复杂度增长与算法成本

在写程序前先严格比较 O(1)、O(log n)、O(n)、O(n log n)、O(n^2) 的增长。

笔记系列

CSCI2520:资料结构

针对 CSCI2520 资料结构基础的结构化笔记,重视操作层级推理与选择性互动示范。

章节 1

ADT 与操作语义

由 ADT 规格走向 stack/queue 实作中的操作行为。

章节 2

复杂度与排序

渐进增长、成本比较与面向排序的复杂度推理。

为什么先做复杂度分析

渐进分析回答的是“输入变大时成本如何放大”。它比常数项调优更能决 定算法是否可扩展。

定义

Big-O 上界

T(n)=O(f(n))T(n)=O(f(n)) 表示存在常数 C>0C>0n0n_0,使得对所有 nn0n\ge n_0 都有 T(n)Cf(n)T(n)\le C f(n)

边读边试

在同一 n 比较渐进增长

在同一 n 下比较多种级别,让相对增长差距具体化。

ClassValue at n=16
O(1)1.00
O(log n)4.00
O(n)16.00
O(n log n)64.00
O(n^2)256.00

常见级别

  • O(1):直接存取、已知节点的 pointer 重连
  • O(log n):对半缩减搜索
  • O(n):线性扫描
  • O(n log n):分治加线性合并
  • O(n2)O(n^2):双层线性循环

快速检查

快速检查

两层各跑 n 次的循环(内部 O(1))是什么复杂度?

直接乘法则。

解答

答案