☀️

信息学奥赛常用数学符号

💡 课程介绍

欢迎来到信息学奥赛常用数学符号教程!在信息学竞赛(如NOIP, CSP, NOI等)中,扎实的数学基础是解决算法问题的关键。许多题目描述和解题思路都离不开特定的数学符号。

本教程旨在系统地介绍这些常用符号,包括它们的**含义、读法、常见用法以及在算法中的应用**。通过清晰的讲解、直观的示例和互动练习,帮助你快速掌握这些重要的数学工具,提升解题能力。

点击下方卡片开始学习吧!👇

📚 课程目录

📊 信息学奥赛数学符号总览

快速查阅

下表汇总了信息学奥赛中最常遇到的数学符号,按照常见领域进行了分类。你可以用它来快速回顾或查找特定符号的含义。

符号 中文名称 英文名称 意义 / 用法 常见公式示例
集合符号
$ \in $属于Element of$ a \in A $ 表示 $a$ 是集合 $A$ 的元素$ 2 \in \{1, 2, 3\} $
$ \notin $不属于Not element of$ a \notin A $ 表示 $a$ 不是集合 $A$ 的元素$ 4 \notin \{1, 2, 3\} $
$ \subseteq $子集Subset$ A \subseteq B $ 表示 $A$ 是 $B$ 的子集(允许 $A=B$)$ \{1, 2\} \subseteq \{1, 2, 3\} $
$ \subset $真子集Proper subset$ A \subset B $ 表示 $A$ 是 $B$ 的子集且 $A \neq B$$ \{1, 2\} \subset \{1, 2, 3\} $
$ \cup $并集Union$ A \cup B $ 包含所有 $A$ 或 $B$ 中的元素$ \{1, 2\} \cup \{2, 3\} = \{1, 2, 3\} $
$ \cap $交集Intersection$ A \cap B $ 包含所有同时在 $A$ 和 $B$ 中的元素$ \{1, 2\} \cap \{2, 3\} = \{2\} $
$ \setminus $差集Difference / Set minus$ A \setminus B $ 包含所有在 $A$ 中但不在 $B$ 中的元素$ \{1, 2, 3\} \setminus \{2, 3\} = \{1\} $
$ |A| $集合大小Cardinality集合 $A$ 中元素的个数$ |\{1, 2, 3\}| = 3 $
$ \emptyset $ 或 $ \{\} $空集Empty set不包含任何元素的集合$ A \cap \emptyset = \emptyset $
数论符号
$ a \mid b $整除Divides$b$ 可以被 $a$ 整除 ($a \neq 0$)$ 3 \mid 12 $
$ a \nmid b $不整除Does not divide$b$ 不能被 $a$ 整除$ 5 \nmid 12 $
$ \text{mod} $取模Modulo$ a \pmod b $ (或 $a \bmod b$) 是 $a$ 除以 $b$ 的余数$ 7 \bmod 3 = 1 $
$ \equiv $同余Congruent$ a \equiv b \pmod m $ 表示 $a$ 和 $b$ 除以 $m$ 的余数相同$ 7 \equiv 1 \pmod 3 $
$ \text{gcd}(a, b) $最大公约数Greatest Common Divisor$a$ 和 $b$ 的最大正公约数$ \text{gcd}(12, 18) = 6 $
$ \text{lcm}(a, b) $最小公倍数Least Common Multiple$a$ 和 $b$ 的最小正公倍数$ \text{lcm}(4, 6) = 12 $
$ \phi(n) $欧拉函数Euler's totient function小于等于 $n$ 且与 $n$ 互质的正整数个数$ \phi(6) = 2 $ (1, 5)
代数与组合符号
$ \sum $求和Summation对一系列项求和 $ \sum_{i=a}^{b} f(i) $$ \sum_{i=1}^{n} i = \frac{n(n+1)}{2} $
$ \prod $连乘Product对一系列项求积 $ \prod_{i=a}^{b} f(i) $$ \prod_{i=1}^{n} i = n! $
$ n! $阶乘Factorial$ n! = 1 \times 2 \times \dots \times n $ ($0! = 1$)$ 5! = 120 $
$ C(n, k) $ 或 $ \binom{n}{k} $组合数Combination / Binomial coefficient从 $n$ 个不同元素中选 $k$ 个的方案数$ C(n, k) = \frac{n!}{k!(n-k)!} $
$ P(n, k) $ 或 $ A_n^k $排列数Permutation从 $n$ 个不同元素中选 $k$ 个进行排列的方案数$ P(n, k) = \frac{n!}{(n-k)!} $
$ \log_b a $对数Logarithm以 $b$ 为底 $a$ 的对数$ \log_2 8 = 3 $
$ \lg n $常用对数/以2为底Log base 10 / Log base 2信息学中常指 $ \log_2 n $算法复杂度 $ O(n \lg n) $
$ \ln n $自然对数Natural logarithm以 $e$ 为底的对数 $ \log_e n $微积分中常见
逻辑符号
$ \land $与 (合取)And (Conjunction)$ p \land q $ 为真,当且仅当 $p, q$ 都为真$ (x>0) \land (x<5) $
$ \lor $或 (析取)Or (Disjunction)$ p \lor q $ 为真,当且仅当 $p, q$ 至少一个为真$ (n \% 2 == 0) \lor (n \% 3 == 0) $
$ \neg $ 或 $ \sim $非 (否定)Not (Negation)$ \neg p $ 为真,当且仅当 $p$ 为假$ \neg (x = 0) $ 等价于 $ x \neq 0 $
$ \Rightarrow $ 或 $ \rightarrow $蕴含 (推出)Implies$ p \Rightarrow q $ 表示若 $p$ 为真,则 $q$ 必为真$ x > 2 \Rightarrow x^2 > 4 $
$ \Leftrightarrow $ 或 $ \leftrightarrow $等价 (当且仅当)Equivalent (If and only if)$ p \Leftrightarrow q $ 表示 $p, q$ 同真同假$ (x=2) \Leftrightarrow (x^2=4 \land x>0) $
$ \forall $任意 (全称量词)For all对所有...$ \forall x \in \mathbb{R}, x^2 \ge 0 $
$ \exists $存在 (存在量词)Exists存在至少一个...$ \exists x \in \mathbb{Z}, x^2 = 4 $ (x=2 或 x=-2)
复杂度符号
$ O(f(n)) $大O (渐进上界)Big-O函数增长率的上界排序算法 $ O(n \log n) $
$ \Omega(f(n)) $大Omega (渐进下界)Big-Omega函数增长率的下界基于比较的排序 $ \Omega(n \log n) $
$ \Theta(f(n)) $大Theta (渐进紧确界)Big-Theta函数增长率的精确界 ($O$ 且 $\Omega$)归并排序 $ \Theta(n \log n) $
$ o(f(n)) $小o (非紧确上界)Little-o严格小于 $f(n)$ 的增长率$ n = o(n^2) $
$ \omega(f(n)) $小Omega (非紧确下界)Little-omega严格大于 $f(n)$ 的增长率$ n^2 = \omega(n) $
其他常用符号
$ \lfloor x \rfloor $向下取整 (地板函数)Floor function小于或等于 $x$ 的最大整数$ \lfloor 3.7 \rfloor = 3 $, $ \lfloor -3.2 \rfloor = -4 $
$ \lceil x \rceil $向上取整 (天花板函数)Ceiling function大于或等于 $x$ 的最小整数$ \lceil 3.2 \rceil = 4 $, $ \lceil -3.7 \rceil = -3 $
$ \infty $无穷大Infinity表示无限大的概念$ \lim_{n \to \infty} \frac{1}{n} = 0 $
$ \approx $约等于Approximately equal数值上近似相等$ \pi \approx 3.14159 $
$ \propto $正比于Proportional to$ y \propto x $ 表示 $ y = kx $ (k为常数) 动能 $ E_k \propto v^2 $
$ \mathbb{N} $自然数集Natural numbers通常指 $ \{0, 1, 2, \dots\} $ 或 $ \{1, 2, 3, \dots\} $ (注意定义)$ n \in \mathbb{N} $
$ \mathbb{Z} $整数集Integers$ \{\dots, -2, -1, 0, 1, 2, \dots\} $$ x \in \mathbb{Z} $
$ \mathbb{Q} $有理数集Rational numbers可以表示为 $ p/q $ 的数 ($p, q \in \mathbb{Z}, q \neq 0$)$ \frac{1}{2} \in \mathbb{Q} $
$ \mathbb{R} $实数集Real numbers包括有理数和无理数$ \pi \in \mathbb{R} $

注意: 某些符号 (如 $ \lg n $, $ \mathbb{N} $) 的具体含义可能因上下文或约定而略有不同,请留意题目说明或通常惯例。

∪ 集合符号

集合是数学的基本概念,表示一些具有共同性质的事物的总体。信息学中常用集合来描述元素的归属、关系和操作。

$ \in $
属于 (Element of)

含义: 表示一个元素是某个集合的成员。

读法: "属于" 或 "is an element of"。$a \in S$ 读作 "a 属于 S"。

反义: $ \notin $ (不属于)。

示例:

$ 5 \in \{1, 3, 5, 7\} $ (5 属于集合 {1, 3, 5, 7})

$ 4 \notin \{1, 3, 5, 7\} $ (4 不属于集合 {1, 3, 5, 7})

$ \subseteq $
子集 (Subset)

含义: $A \subseteq B$ 表示集合 $A$ 中的所有元素都在集合 $B$ 中。

注意: 允许 $A = B$。

相关: $ \subset $ (真子集),表示 $A \subseteq B$ 且 $A \neq B$。

示例:

$ \{1, 2\} \subseteq \{1, 2, 3\} $ (是子集)

$ \{1, 2, 3\} \subseteq \{1, 2, 3\} $ (是子集)

$ \{1, 2\} \subset \{1, 2, 3\} $ (是真子集)

$ \{1, 4\} \not\subseteq \{1, 2, 3\} $ (不是子集)

$ \cup $
并集 (Union)

含义: $A \cup B$ 是包含所有 $A$ 中或 $B$ 中元素的新集合(重复元素只计一次)。

类比: 逻辑 "或" ($\lor$)。

示例:

$ \{1, 2\} \cup \{2, 3\} = \{1, 2, 3\} $

$ A = \{a, b\}, B = \{c, d\} \Rightarrow A \cup B = \{a, b, c, d\} $

$ \cap $
交集 (Intersection)

含义: $A \cap B$ 是包含所有同时存在于 $A$ 和 $B$ 中的元素的新集合。

类比: 逻辑 "与" ($\land$)。

示例:

$ \{1, 2\} \cap \{2, 3\} = \{2\} $

$ \{1, 2\} \cap \{3, 4\} = \emptyset $ (空集)

$ \setminus $
差集 (Difference)

含义: $A \setminus B$ (或 $A - B$) 是包含所有在 $A$ 中但不在 $B$ 中的元素的新集合。

注意: 运算顺序很重要,$A \setminus B \neq B \setminus A$ (除非 $A=B$)。

示例:

$ \{1, 2, 3\} \setminus \{2, 3\} = \{1\} $

$ \{2, 3\} \setminus \{1, 2, 3\} = \emptyset $

$ |A| $
集合大小 (Cardinality)

含义: 表示集合 $A$ 中元素的数量。

应用: 容斥原理、计数问题等。

示例:

$ S = \{a, b, c\} \Rightarrow |S| = 3 $

$ |\emptyset| = 0 $

容斥原理: $|A \cup B| = |A| + |B| - |A \cap B|$

≡ 数论符号

数论研究整数的性质,在信息学竞赛中非常重要,尤其是在密码学、组合计数和优化问题中。

$ \text{mod} $
取模 (Modulo)

含义: $ a \pmod b $ (或 $ a \bmod b $, C++/Java中用 `%` 运算符) 表示 $a$ 除以 $b$ 的非负余数。

范围: 通常结果在 $[0, b-1]$ 区间内(对于正数 $b$)。注意负数的取模在不同语言中可能不同。

应用: 哈希、大数运算、周期性问题、同余。

示例:

$ 17 \bmod 5 = 2 $ (因为 $17 = 3 \times 5 + 2$)

$ 10 \bmod 2 = 0 $ (10是偶数)

$ -7 \bmod 3 $ 在数学上通常是 $2$, 但 C++/Java 中可能是 $-1$ (依赖实现)。通常用 `(a % b + b) % b` 来确保正余数。

$ \equiv $
同余 (Congruent)

含义: $ a \equiv b \pmod m $ 表示 $a$ 和 $b$ 除以 $m$ 的余数相同。

等价条件: $ m \mid (a-b) $,即 $m$ 能整除 $a-b$ 的差。

性质: 同余关系具有类似等号的性质(反射性、对称性、传递性),可以进行加、减、乘运算。

示例:

$ 17 \equiv 2 \pmod 5 $ (因为 $17 \bmod 5 = 2$ 且 $2 \bmod 5 = 2$)

$ 10 \equiv 0 \pmod 2 $

$ -1 \equiv 4 \pmod 5 $ (因为 $5 \mid (-1 - 4)$)

应用: 费马小定理、欧拉定理、中国剩余定理。

$ \text{gcd} $
最大公约数 (GCD)

含义: $\text{gcd}(a, b)$ (Greatest Common Divisor) 是能同时整除 $a$ 和 $b$ 的最大正整数。

算法: 常用欧几里得算法(辗转相除法)高效计算。

性质: $\text{gcd}(a, 0) = |a|$, $\text{gcd}(a, b) = \text{gcd}(b, a \bmod b)$。

应用: 分数化简、扩展欧几里得算法(解线性同余方程)。

示例:

$ \text{gcd}(12, 18) = 6 $

$ \text{gcd}(17, 5) = 1 $ (互质)

C++ 实现 (递归):

int gcd(int a, int b) {
    return b == 0 ? a : gcd(b, a % b);
}
$ \text{lcm} $
最小公倍数 (LCM)

含义: $\text{lcm}(a, b)$ (Least Common Multiple) 是能同时被 $a$ 和 $b$ 整除的最小正整数。

计算公式: 基于 GCD 计算: $\text{lcm}(a, b) = \frac{|a \times b|}{\text{gcd}(a, b)}$。

注意: 直接计算 $a \times b$ 可能导致溢出,最好写成 $a / \text{gcd}(a, b) \times b$。

应用: 周期问题、任务调度。

示例:

$ \text{lcm}(4, 6) = \frac{4 \times 6}{\text{gcd}(4, 6)} = \frac{24}{2} = 12 $

$ \text{lcm}(5, 7) = \frac{5 \times 7}{\text{gcd}(5, 7)} = \frac{35}{1} = 35 $

C++ 实现:

long long lcm(int a, int b) {
    // 需要先包含 gcd 函数
    if (a == 0 || b == 0) return 0; // 处理边界
    return (long long)a / gcd(a, b) * b; // 防止溢出
}

∑ 代数与组合符号

代数符号(如求和、连乘)和组合数学符号(如排列、组合)是分析算法、解决计数问题的基础。

$ \sum $
求和 (Summation)

含义: $ \sum_{i=a}^{b} f(i) $ 表示将 $i$ 从 $a$ 到 $b$ (通常是整数步长) 的所有 $f(i)$ 的值加起来。

读法: "西格玛 (Sigma)" 或 "sum from i equals a to b of f(i)"。

常见公式:

  • 等差数列: $ \sum_{i=1}^{n} i = \frac{n(n+1)}{2} $
  • 等比数列: $ \sum_{i=0}^{n} ar^i = a \frac{r^{n+1}-1}{r-1} $ ($r \neq 1$)
  • 平方和: $ \sum_{i=1}^{n} i^2 = \frac{n(n+1)(2n+1)}{6} $

示例:

$ \sum_{i=1}^{4} i^2 = 1^2 + 2^2 + 3^2 + 4^2 = 1 + 4 + 9 + 16 = 30 $

$ \sum_{k=0}^{3} 2^k = 2^0 + 2^1 + 2^2 + 2^3 = 1 + 2 + 4 + 8 = 15 $

$ \prod $
连乘 (Product)

含义: $ \prod_{i=a}^{b} f(i) $ 表示将 $i$ 从 $a$ 到 $b$ 的所有 $f(i)$ 的值乘起来。

读法: "派 (Pi)" 或 "product from i equals a to b of f(i)"。

常见应用: 阶乘。

示例:

$ \prod_{i=1}^{n} i = 1 \times 2 \times \dots \times n = n! $ (阶乘)

$ \prod_{k=1}^{3} (k+1) = (1+1) \times (2+1) \times (3+1) = 2 \times 3 \times 4 = 24 $

$ n! $
阶乘 (Factorial)

含义: $n!$ 表示从 1 到 $n$ 的所有正整数的乘积。

定义: $ n! = \prod_{i=1}^{n} i = n \times (n-1) \times \dots \times 1 $。

特殊约定: $0! = 1$。

应用: 排列组合、概率计算。

示例:

$ 4! = 4 \times 3 \times 2 \times 1 = 24 $

$ 1! = 1 $

$ 0! = 1 $

注意: 阶乘增长非常快,计算时需注意溢出。

$ \binom{n}{k} $
组合数 (Combination)

含义: $ C(n, k) $ 或 $ \binom{n}{k} $ (读作 "n choose k") 表示从 $n$ 个不同的元素中无序地选取 $k$ 个元素的方案数。

计算公式: $ \binom{n}{k} = \frac{n!}{k!(n-k)!} $ (要求 $0 \le k \le n$)

递推公式 (杨辉三角): $ \binom{n}{k} = \binom{n-1}{k-1} + \binom{n-1}{k} $

性质: $ \binom{n}{k} = \binom{n}{n-k} $, $ \binom{n}{0} = \binom{n}{n} = 1 $

应用: 二项式定理、路径计数、分配问题。

示例:

$ \binom{4}{2} = \frac{4!}{2!(4-2)!} = \frac{24}{2 \times 2} = 6 $ (从{A,B,C,D}选2个: AB, AC, AD, BC, BD, CD)

$ \binom{5}{3} = \binom{5}{2} = \frac{5 \times 4}{2 \times 1} = 10 $ (计算技巧)

$ P(n, k) $
排列数 (Permutation)

含义: $ P(n, k) $ 或 $ A_n^k $ 表示从 $n$ 个不同的元素中有序地选取 $k$ 个元素进行排列的方案数。

计算公式: $ P(n, k) = \frac{n!}{(n-k)!} = n \times (n-1) \times \dots \times (n-k+1) $ ($k$ 项)

与组合数关系: $ P(n, k) = \binom{n}{k} \times k! $ (先选后排)

应用: 排序问题、有顺序的安排问题。

示例:

$ P(4, 2) = \frac{4!}{(4-2)!} = \frac{24}{2} = 12 $ (从{A,B,C,D}选2个排列: AB, BA, AC, CA, AD, DA, BC, CB, BD, DB, CD, DC)

$ P(n, n) = n! $ (全排列)

∧ 逻辑符号与量词

逻辑符号用于表达命题之间的关系,量词则用于限定变量的范围。它们是精确描述算法条件和证明正确性的基础。

$ \land $
与 (And / Conjunction)

含义: $ p \land q $ (读作 "p and q")。当且仅当命题 $p$ 和 $q$ **都**为真时,结果为真。

真值表:

pqp ∧ q
TTT
TFF
FTF
FFF

编程对应: C++/Java 中的 `&&` 运算符。

示例:

命题 "数字 $x$ 大于 0 且小于 5" 可以表示为 $ (x > 0) \land (x < 5) $。

$ \lor $
或 (Or / Disjunction)

含义: $ p \lor q $ (读作 "p or q")。当命题 $p$ 和 $q$ **至少有一个**为真时,结果为真。

真值表:

pqp ∨ q
TTT
TFT
FTT
FFF

编程对应: C++/Java 中的 `||` 运算符。

示例:

命题 "数字 $n$ 是偶数或是 3 的倍数" 可以表示为 $ (n \bmod 2 = 0) \lor (n \bmod 3 = 0) $。

$ \neg $
非 (Not / Negation)

含义: $ \neg p $ (读作 "not p")。当命题 $p$ 为假时,结果为真;当 $p$ 为真时,结果为假。

真值表:

p¬p
TF
FT

编程对应: C++/Java 中的 `!` 运算符。

示例:

$ \neg (x = y) $ 等价于 $ x \neq y $。

德摩根定律: $ \neg (p \land q) \Leftrightarrow (\neg p \lor \neg q) $, $ \neg (p \lor q) \Leftrightarrow (\neg p \land \neg q) $

$ \Rightarrow $
蕴含 (Implies)

含义: $ p \Rightarrow q $ (读作 "p implies q" 或 "若 p 则 q")。表示如果 $p$ 为真,那么 $q$ **必须**为真。如果 $p$ 为假,则整个蕴含式为真(无论 $q$ 真假)。

等价形式: $ \neg p \lor q $。

真值表:

pqp ⇒ q
TTT
TFF
FTT
FFT

注意: $p$ 是 $q$ 的充分条件,$q$ 是 $p$ 的必要条件。

示例:

命题 "如果一个数是素数且大于2,则它一定是奇数": $ (p \text{ is prime} \land p > 2) \Rightarrow (p \text{ is odd}) $。

$ \Leftrightarrow $
等价 (Equivalent / If and only if)

含义: $ p \Leftrightarrow q $ (读作 "p if and only if q",常缩写为 "iff")。表示 $p$ 和 $q$ 的真值**完全相同**。

等价形式: $ (p \Rightarrow q) \land (q \Rightarrow p) $。

真值表:

pqp ⇔ q
TTT
TFF
FTF
FFT

应用: 定义、充要条件。

示例:

命题 "一个整数 $n$ 是偶数当且仅当 $n^2$ 是偶数": $ (n \text{ is even}) \Leftrightarrow (n^2 \text{ is even}) $。

$ \forall $
任意 (For All / Universal Quantifier)

含义: $ \forall x \in S, P(x) $ 表示对于集合 $S$ 中的**所有**元素 $x$,命题 $P(x)$ 都为真。

读法: "对于所有的 x 属于 S,P(x) 成立"。

证伪: 找到一个 $x \in S$ 使得 $P(x)$ 为假即可。

示例:

$ \forall n \in \mathbb{N}, n \ge 0 $ (所有自然数都大于等于0,假设 N={0, 1, ...})

$ \forall x \in \mathbb{R}, x^2 \ge 0 $ (所有实数的平方都非负)

$ \exists $
存在 (Exists / Existential Quantifier)

含义: $ \exists x \in S, P(x) $ 表示在集合 $S$ 中**至少存在一个**元素 $x$,使得命题 $P(x)$ 为真。

读法: "存在 x 属于 S,使得 P(x) 成立"。

证明: 找到一个满足条件的 $x$ 即可。

与 $ \forall $ 的关系 (否定): $ \neg (\forall x, P(x)) \Leftrightarrow (\exists x, \neg P(x)) $; $ \neg (\exists x, P(x)) \Leftrightarrow (\forall x, \neg P(x)) $。

示例:

$ \exists n \in \mathbb{Z}, n^2 = 9 $ (存在整数 n=3 或 n=-3,其平方为9)

$ \exists p \in \text{Primes}, p \text{ is even} $ (存在一个偶素数 p=2)

O 复杂度符号 (渐进表示法)

渐进符号用于描述算法在输入规模 $n$ 趋向于无穷大时的运行时间或空间消耗的增长率趋势,是衡量算法效率的核心工具。

$ O(f(n)) $
大O (Big O / Asymptotic Upper Bound)

含义: $ T(n) = O(f(n)) $ 表示算法的运行时间 $T(n)$ 的增长率**不超过** $f(n)$ 的常数倍 (当 $n$ 足够大时)。它给出了算法效率的**上界**。

形式化定义: 存在正常数 $c$ 和 $n_0$,使得对所有 $ n \ge n_0 $,都有 $ 0 \le T(n) \le c \cdot f(n) $。

常见复杂度 (快到慢): $O(1)$ (常数), $O(\log n)$ (对数), $O(n)$ (线性), $O(n \log n)$ (线性对数), $O(n^2)$ (平方), $O(n^3)$ (立方), $O(2^n)$ (指数), $O(n!)$ (阶乘)。

关注点: 最坏情况下的性能上限。

示例:

二分查找: $ O(\log n) $

归并排序、快速排序 (平均): $ O(n \log n) $

简单的双重循环遍历 $n \times n$ 矩阵: $ O(n^2) $

$ 3n^2 + 5n + 10 = O(n^2) $ (忽略低阶项和常数系数)

$ \Omega(f(n)) $
大Omega (Big Omega / Asymptotic Lower Bound)

含义: $ T(n) = \Omega(f(n)) $ 表示算法的运行时间 $T(n)$ 的增长率**不低于** $f(n)$ 的常数倍 (当 $n$ 足够大时)。它给出了算法效率的**下界**。

形式化定义: 存在正常数 $c$ 和 $n_0$,使得对所有 $ n \ge n_0 $,都有 $ T(n) \ge c \cdot f(n) \ge 0 $。

关注点: 最好情况或任何情况下性能的保证下限。

示例:

任何需要读取 $n$ 个输入的算法至少是 $ \Omega(n) $。

基于比较的排序算法 (如归并、快排、堆排) 的最坏情况和平均情况都是 $ \Omega(n \log n) $。

$ 3n^2 + 5n + 10 = \Omega(n^2) $

$ \Theta(f(n)) $
大Theta (Big Theta / Asymptotic Tight Bound)

含义: $ T(n) = \Theta(f(n)) $ 表示算法的运行时间 $T(n)$ 的增长率与 $f(n)$ **相同** (当 $n$ 足够大时)。它给出了算法效率的**紧确界**。

等价条件: $ T(n) = O(f(n)) $ 且 $ T(n) = \Omega(f(n)) $。

形式化定义: 存在正常数 $c_1, c_2$ 和 $n_0$,使得对所有 $ n \ge n_0 $,都有 $ 0 \le c_1 \cdot f(n) \le T(n) \le c_2 \cdot f(n) $。

关注点: 对算法性能增长率的精确描述。

示例:

归并排序的运行时间总是 $ \Theta(n \log n) $ (无论最好最坏情况)。

查找无序数组中的最大值: $ \Theta(n) $。

$ 3n^2 + 5n + 10 = \Theta(n^2) $。

注意: 快速排序的最坏情况是 $O(n^2)$,平均情况是 $\Theta(n \log n)$,所以不能说快排是 $\Theta(n \log n)$,除非特指平均情况。

$ o(f(n)) $
小o (Little o / Non-tight Upper Bound)

含义: $ T(n) = o(f(n)) $ 表示 $T(n)$ 的增长率**严格小于** $f(n)$ 的增长率。意味着 $ \lim_{n \to \infty} \frac{T(n)}{f(n)} = 0 $。

与 Big O 区别: Big O 允许增长率相等 ($ T(n) = O(n^2) $ 且 $ T(n) = O(n^3) $),而 Little o 要求严格小于 ($ T(n) = o(n^3) $ 但 $ T(n) \neq o(n^2) $ 如果 $ T(n) = \Theta(n^2) $)。

示例:

$ n \log n = o(n^2) $

$ n^2 = o(n^3) $

$ 5n = o(n^2) $

$ \omega(f(n)) $
小Omega (Little omega / Non-tight Lower Bound)

含义: $ T(n) = \omega(f(n)) $ 表示 $T(n)$ 的增长率**严格大于** $f(n)$ 的增长率。意味着 $ \lim_{n \to \infty} \frac{T(n)}{f(n)} = \infty $。

与 Big Omega 区别: 类似于 Little o 和 Big O 的关系。

示例:

$ n^2 = \omega(n \log n) $

$ n^3 = \omega(n^2) $

$ n^2 = \omega(5n) $

📈 复杂度比较

常见复杂度的增长速度排序 (从快到慢):

$ O(1) < O(\log n) < O(\sqrt{n}) < O(n) < O(n \log n) < O(n^2) < O(n^3) < \dots < O(2^n) < O(n!) < O(n^n) $

在信息学竞赛中,通常要求算法复杂度在 $O(n)$, $O(n \log n)$, $O(n\sqrt{n})$, $O(n^2)$ 甚至更低才能在规定时间内通过大数据量的测试点(例如 $n \approx 10^5$ 或 $10^6$ 时,$O(n^2)$ 通常会超时)。

⌊⌋ 其他常用符号

除了前面分类介绍的符号外,还有一些零散但同样重要的符号在信息学中经常出现。

$ \lfloor x \rfloor $
向下取整 (Floor)

含义: $ \lfloor x \rfloor $ (读作 "floor of x") 表示不大于 $x$ 的最大整数。

编程对应: C++/Java 中的 `floor(x)` 函数 (通常返回 double,需转 int),或直接进行整数除法 (对于正数)。例如 `a / b` (当 a, b 为正整数)。对于负数需注意,如 C++ `-7 / 3` 结果是 `-2`,而 $ \lfloor -7/3 \rfloor = \lfloor -2.33\dots \rfloor = -3 $。

公式: $ \lfloor x \rfloor \le x < \lfloor x \rfloor + 1 $

示例:

$ \lfloor 3.14 \rfloor = 3 $

$ \lfloor 5 \rfloor = 5 $

$ \lfloor -2.7 \rfloor = -3 $

$ \lfloor -4 \rfloor = -4 $

应用: 计算数组索引、分块算法、数论问题。

C++ 安全向下取整: `int floor_div(int a, int b) { int res = a / b; return res * b > a ? res - 1 : res; }` (对 b<0 情况未处理)

或者更简洁地处理负数: `floor(a / (double)b)` 再转int,或者 `(a - (a % b + b) % b) / b` 如果需要纯整数运算。

$ \lceil x \rceil $
向上取整 (Ceiling)

含义: $ \lceil x \rceil $ (读作 "ceiling of x") 表示不小于 $x$ 的最小整数。

编程对应: C++/Java 中的 `ceil(x)` 函数 (返回 double)。整数运算中常用技巧: `(a + b - 1) / b` (当 a, b 为正整数时,计算 $a/b$ 的向上取整)。

公式: $ \lceil x \rceil - 1 < x \le \lceil x \rceil $

示例:

$ \lceil 3.14 \rceil = 4 $

$ \lceil 5 \rceil = 5 $

$ \lceil -2.7 \rceil = -2 $

$ \lceil -4 \rceil = -4 $

应用: 分配资源(如至少需要多少容器)、计算循环次数。

C++ 整数向上取整: `(a + b - 1) / b` (假设 a >= 0, b > 0)

处理负数: `(a > 0) ? (a + b - 1) / b : a / b` (对 b<0 未处理)

或者通用: `(a % b == 0) ? a / b : a / b + (a * b < 0 ? 0 : 1)` (复杂)

$ \infty $
无穷大 (Infinity)

含义: $ \infty $ 表示一个理论上无限大的值或概念,不是一个具体的数字。

用法:

  • 极限: $ \lim_{n \to \infty} \frac{1}{n} = 0 $
  • 区间表示: $ [a, \infty) $ 表示所有大于等于 $a$ 的实数。
  • 算法中表示极大值: 在需要初始化一个极大值(如求最小值问题)时,通常用一个足够大的数 `0x3f3f3f3f` (约 $10^9$) 或 `LLONG_MAX` (约 $9 \times 10^{18}$) 来模拟正无穷。避免使用 `INT_MAX` 直接相加导致溢出。

示例:

Dijkstra 算法初始化距离数组 `dist[i] = infinity`。

求最小值时,`min_val = infinity;` 然后 `min_val = min(min_val, current_val);`

C++ 常用 "无穷大" 值:

const int INF = 0x3f3f3f3f; // ~10^9, int范围, 相加不易溢出
const long long LINF = 0x3f3f3f3f3f3f3f3fLL; // ~9*10^18, long long范围
// #include 
// int max_int = std::numeric_limits::max(); // 约 2*10^9
// long long max_ll = std::numeric_limits::max(); // 约 9*10^18
$ \approx $
约等于 (Approximately Equal)

含义: 表示两个数值在一定精度下非常接近。

用法:

  • 估算: $ \pi \approx 3.14 $
  • 浮点数比较: 在编程中比较两个浮点数 `a` 和 `b` 是否相等时,不能直接用 `a == b`,而应判断它们的差的绝对值是否小于一个很小的正数 $\epsilon$ (epsilon)。 $ |a - b| < \epsilon $

示例:

$ \sqrt{2} \approx 1.414 $

C++ 浮点数比较:

const double EPS = 1e-8; // 定义精度
double a = 0.1 + 0.2;
double b = 0.3;
if (fabs(a - b) < EPS) {
    // 认为 a 和 b 相等
    std::cout << "a is approximately equal to b" << std::endl;
} else {
    std::cout << "a is not equal to b" << std::endl; // 可能输出这个!
}

📝 模拟练习

通过下面的练习来检验你对这些数学符号的掌握程度吧!

选择题

1. 符号 $ \binom{n}{k} $ 代表什么意思?
从 n 个元素中选 k 个进行排列
从 n 个元素中选 k 个的组合(不考虑顺序)
n 的 k 次方
n 除以 k 的向下取整
2. $ 15 \equiv x \pmod{7} $,下列哪个 $x$ 值满足该同余式?
0
1
7
15
3. 算法复杂度 $ O(n \log n) $ 通常比 $ O(n^2) $:
效率更高(更快)
效率更低(更慢)
效率相同
无法比较
4. $ \lfloor -5.5 \rfloor $ 的值是多少?
-5
-6
5
6
5. 命题 $ \forall x \in \mathbb{R}, x^2 > 0 $ 是否为真?

编程实践

1. 实现一个函数 `long long combinations(int n, int k)`,计算组合数 $ \binom{n}{k} $。注意处理边界条件和可能出现的溢出问题 (结果可能很大)。可以不使用大数运算,假设结果在 `long long` 范围内。
2. 实现一个函数 `bool are_coprime(int a, int b)`,判断两个正整数 $a$ 和 $b$ 是否互质(即它们的最大公约数 $\text{gcd}(a, b)$ 是否为 1)。