Skip to content

定义Definition

渐近记号

施工中 · 内容逐步修订

Asymptotic notation · Big O notation

忽略常数和低阶项,比较函数在输入趋于无穷时的增长速度。

形式陈述 ​

在算法分析中,输入规模 n 取自自然数集 N;设 f,g:N→R≥0 是最终非负的资源函数。定义

f∈O(g)⟺∃c>0∃n0∀n≥n0:0≤f(n)≤cg(n).

对偶地,f∈Ω(g) 表示存在 c>0,n0,使所有 n≥n0 都有 f(n)≥cg(n);同时属于 O(g) 与 Ω(g) 时记为 f∈Θ(g)。严格渐近关系的量词为

f∈o(g)⟺∀c>0 ∃n0 ∀n≥n0,f(n)≤cg(n),

以及

f∈ω(g)⟺∀c>0 ∃n0 ∀n≥n0,f(n)≥cg(n).

当 g 最终为正时,二者分别等价于 f(n)/g(n)→0 与 f(n)/g(n)→∞。

若要对可取负值的一般实函数使用 O,则以 |f(n)|≤c|g(n)| 为定义,其他关系也须明确符号条件。本库的复杂度语境默认前一种非负资源函数约定。

量词顺序决定了常数可以依赖什么。若 f(n;θ) 还带有参数 θ,写“对每个固定 θ,f(⋅;θ)∈O(g)”允许 c,n0 随 θ 改变;若要求对所有 θ 一致成立,就必须在量化 θ 之前选定同一组 c,n0。把一个增长参数吸进常数,往往正是错误复杂度结论的来源。

直觉

常数 c 吸收机器、语言与实现的固定倍率差异,起点 n0 则忽略有限多个小输入上的反常。证明 f∈O(g) 时,必须选出一组固定的 c,n0,让它们同时覆盖此后的全部规模,不能在看见每个 n 后重新选 c。反驳这个关系则要说明任意固定倍率最终都会被某些输入规模突破。

这使比较聚焦于输入放大时成本如何增长,得到 log⁡n≺n≺nlog⁡n≺n2≺2n 这类结构性层次。O(g) 只是上界函数类,紧确的同阶结论应写成 Θ(g);小 o 则更强,要求无论倍率取得多小,最终仍能作为上界。

O、Omega 与 Theta 的边界
例子与边界

3n2+5n+7∈Θ(n2):当 n≥1 时,3n2≤3n2+5n+7≤15n2。对固定底数 a,b>1,换底公式说明 loga⁡n∈Θ(logb⁡n),所以对数复杂度通常不写底;指数的底则不能忽略,因为 2n∈o(3n)。函数也无须单调。例如 f(n)=n2+nsin⁡n 虽有振荡,当 n≥2 时仍有

12n2≤n2−n≤f(n)≤n2+n≤32n2,

因而 f∈Θ(n2)。又有 nlog⁡n∈o(n3/2),因为 log⁡n/n→0。只写 nlog⁡n∈O(n3/2) 虽正确,却丢失了比值趋零这一更强信息。

n∈O(n2) 为真但不紧,因而上界不能单独证明最优性。“f=O(g)”是常见的历史写法,实质是成员关系 f∈O(g),不可交换或移项;本库优先使用成员记法。定义也允许 c 与 n0 大得惊人:常数因子为 109 的 Θ(n) 实现在一切现实规模上都可能输给常数温和的 Θ(nlog⁡n) 实现。渐近优势只是“最终”的承诺,现实输入仍受常数、内存层次和实现成本影响。

从执行次数到增长率 ​

若外层循环依次取 i=1,…,n,第 i 轮的内层恰好执行 i 次常数成本操作,则总次数为 1+2+⋯+n=n(n+1)/2∈Θ(n2)。两个循环嵌套并不是二次界的证明:若第 i 轮只执行常数次,总成本便是线性;若内层变量每轮翻倍,总次数又由对数决定。先数实际执行的操作,再用渐近记号简化,才能保留算法机制。

渐近函数也未必两两可比。令 f(n) 在偶数时为 n、奇数时为 n3,并令 g(n)=n2。比值沿偶数趋于零、沿奇数趋于无穷,因此既没有 f∈O(g),也没有 f∈Ω(g)。常见增长率表是重要例子,并不是所有资源函数构成的全序表。

推论与应用

渐近记号为时间、空间和摊还成本提供统一的增长率语言,但它不会替分析者选择资源模型。最坏、期望、高概率和摊还是不同的量化维度;即使它们都得到 O(n),结论也不相同。通信位数、oracle 查询次数与机器指令同样不能只因量纲都写成一个整数就直接比较。

多参数界应保留真正会变化的参数,并说明趋近区域。比如

T(n,ε)=O(nlog⁡1ε)

可以表示存在与 n,ε 均无关的 c,n0,使定理规定范围内的所有 n≥n0、0<ε≤ε0 都满足该界;也可能只表示固定 ε 后关于 n 的上界,此时隐藏常数允许依赖 ε。两种陈述必须用量词、下标或文字区分。类似地,若复杂度还依赖字长、块大小、输出大小或错误概率,省略参数只在它已被明确固定时才安全。

因此,“某问题需要 Ω(n)”必须同时交代 n 表示什么、计算单位是什么、其他参数如何量化。对多变量函数也没有唯一的“趋于无穷”:可以要求各坐标独立增长,也可以限定在 m≤n2 之类的区域内。定义域和常数依赖关系都是渐近结论的一部分,而不是排版细节。

参考资料
  • Thomas H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, Chapter 3.
  • Donald E. Knuth, “Big Omicron and Big Omega and Big Theta,” ACM SIGACT News 8(2), 1976, pp. 18–24.
关系图谱142 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

被这些条目使用