大O记号

概述

大O记号(Big-O Notation)是描述函数增长速率上限的数学工具,记作 ,表示存在常数 使得 对所有 成立。大O记号由德国数学家 Paul Bachmann 于 1894 年首次引入,后经 Edmund Landau 推广,因此也称为 Bachmann-Landau 记号。大O记号是渐近分析体系的核心,与==大记号(下界)、记号(紧确界)和Little-o记号(严格上界)共同构成完整的渐近记号体系,是算法复杂度分析==的理论基础。

定义

大O记号(Big-O Notation)

是从整数集或实数集到实数集的函数。若存在常数 使得

则称 ,读作” 是大O的 ”。

  • 常数 称为该关系的证人(witnesses)
  • 直觉含义: 的增长速度不超过 的某个常数倍
  • 足够大时),则

记号(Big-Omega Notation)

是从整数集或实数集到实数集的函数。若存在正常数 使得

则称 ,读作” 是大Omega的 ”。

  • 提供函数增长的下界
  • 关键对偶关系: 当且仅当

记号(Big-Theta Notation)

当且仅当

等价定义:存在正常数 使得

  • 表示两个函数同阶增长(same order)
  • 当且仅当

Little-o 记号

(读作” 是 little-o 的 “)当且仅当

  • Little-o 表示 的增长严格小于
  • 蕴含 ,但反之不成立
  • 例如:,但

核心性质

性质描述公式/条件
多项式的大O估计多项式的阶由最高次项决定
多项式的大估计多项式的紧确界等于最高次项
和的大O估计两个大O函数之和取较大者
同阶函数之和同为 的函数之和仍为
积的大O估计两个大O函数之积
传递性大O关系可传递
Little-o 蕴含大O严格上界蕴含上界
O 与 的对偶性上下界互为对偶

常见大O复杂度层级

以下复杂度按增长速度从慢到快排列:

复杂度术语典型算法
常数复杂度取列表首元素
对数复杂度二分搜索
线性复杂度线性搜索
线性对数复杂度归并排序
多项式复杂度冒泡排序、插入排序
指数复杂度穷举搜索
阶乘复杂度旅行商问题穷举

关系网络

graph TB
    A["大O记号"] --> B["算法复杂度"]
    A --> C["函数增长"]
    A --> D["渐近分析"]
    A --> E["函数"]
    A --> F["算法"]

    A --> G["大Ω记号 Big-Omega"]
    A --> H["大Θ记号 Big-Theta"]
    A --> I["Little-o 记号"]

    G --> G1["提供下界"]
    H --> H1["提供紧确界"]
    I --> I1["严格上界"]

    B --> B1["应用场景:度量算法效率"]
    C --> C1["具体函数的增长行为"]
    D --> D1["理论体系:渐近记号体系"]
    E --> E1["数学基础:函数定义"]
    F --> F1["被度量的对象"]

    style A fill:#5cb85c,color:#fff
    style B fill:#d9534f,color:#fff
    style C fill:#4a90d9,color:#fff
    style D fill:#e8a838,color:#fff
  • 算法复杂度 — 大O记号的核心应用场景,用于度量算法的时间和空间效率
  • 函数增长 — 提供具体函数的增长行为,是大O记号分析的对象
  • 渐近分析 — 大O记号所属的理论体系,包含五种渐近记号的完整框架
  • 函数 — 大O记号的数学基础,定义在实值函数之上
  • 算法 — 大O记号所度量的对象,通过复杂度分析比较不同算法的效率

章节扩展

第3章:算法

大O记号是第 3 章的核心数学工具,贯穿 3.2 节和 3.3 节:

  • 3.1 算法:算法的伪代码描述与基本概念,为复杂度分析提供度量对象
  • 3.2 函数的增长:系统介绍大O、大、大、Little-o 四种渐近记号的定义、性质与运算规则,以及常见函数的增长阶比较
  • 3.3 算法复杂度分析:将大O记号应用于具体算法(线性搜索 、二分搜索 、冒泡排序 、归并排序 ),分析最坏情况、平均情况和最好情况

补充

大O记号的历史与学术来源

大O记号由德国数学家 Paul Bachmann 于 1894 年在其解析数论著作 Analytische Zahlentheorie 中首次引入,后经 Edmund Landau(1909)在解析数论研究中广泛推广使用,因此也被称为”Bachmann-Landau 记号”。Donald Knuth 在 1976 年的论文 “Big Omicron and Big Omega and Big Theta” 中进一步规范了 三种记号的定义与用法,使其成为计算机科学中算法分析的通用标准。

忽略常数因子的核心原因在于:当 足够大时,常数因子的影响被增长阶完全主导。例如 最终会超过 。不同编程语言或硬件平台之间的常数因子差异可达 10-100 倍,但这些差异无法改变算法的渐近阶。

学术来源

  • Bachmann, P. (1894). Analytische Zahlentheorie. Leipzig: Teubner.
  • Landau, E. (1909). Handbuch der Lehre von der Verteilung der Primzahlen. Leipzig: Teubner.
  • Knuth, D. E. (1976). “Big Omicron and Big Omega and Big Theta.” ACM SIGACT News, 6(2), 18-24.

参见

  • 算法 — 大O记号所度量的对象,算法的效率通过大O记号来描述
  • 算法复杂度 — 大O记号在算法分析中的具体应用,包括时间复杂度与空间复杂度
  • 函数增长 — 常见增长函数的比较与排序,是大O记号分析的基础
  • 渐近分析 — 大O记号所属的理论体系,包含完整的渐近记号框架
  • 函数 — 大O记号的数学基础,渐近记号定义在实值函数之上