初等组合与竞赛组合定理总目录

按你第一个文档的组合条目来整理,并采用第二个文档的呈现方式。 每条尽量包含:定理陈述 / 前置依赖 / 定理解释 / 示例 / 示例解释
建议路线:
建议: 先把“能用双计数证明的结论”系统打通,再补“递推与生成函数”,最后进入“集合族 / 图论 / 染色 / 设计”这些更结构化的组合内容。

总目录

  1. 基础计数原理
  2. 排列、组合与多重计数
  3. 二项式定理与经典恒等式
  4. 容斥原理与错排问题
  5. 抽屉原理与极值思想
  6. 递推关系与常见数列
  7. 生成函数入门
  8. 分拆理论与 Ferrers 图
  9. Catalan 体系与路径计数
  10. 组合恒等式与双计数
  11. 集合族与偏序理论
  12. Ramsey 理论与极值组合
  13. 图论基础计数结论
  14. 匹配、覆盖与网络流型结论
  15. 染色、多项式与图计数
  16. 对称群作用与计数
  17. 设计、编码与有限几何相关结论
  18. 竞赛组合小众定理清单

一、基础计数原理

这一部分是组合最根本的基础。很多复杂问题最后都还是要拆回“加法原理”和“乘法原理”。
1. 加法原理 入门
若一个任务可由若干种互不相交的方法完成,且第 \(i\) 类方法有 \(a_i\) 种,则总方法数为
\[ a_1+a_2+\cdots+a_n. \]
前置:有限集合基数概念。
定理解释:当一个任务被分成若干个互不重叠的类别时,总数就是把每一类的方法数直接加起来。关键点在于“互不相交”。
示例:从甲、乙、丙三条不同路线中选一条回家,若三条路线分别有 2、3、4 种走法,则总走法数为 \(2+3+4=9\)。
示例解释:因为每次只走其中一类路线,三类情况彼此不重叠,所以直接相加。
2. 乘法原理 入门核心
若一个任务分成 \(n\) 个步骤,第 \(i\) 步有 \(a_i\) 种选法,则总方法数为
\[ a_1a_2\cdots a_n. \]
前置:有序选择、笛卡尔积基数。
定理解释:当一个任务必须按步骤连续完成时,总数要把每一步的选择数相乘。它描述的是“先做这件,再做那件”的情形。
示例:从 4 件上衣中选 1 件,再从 3 条裤子中选 1 条,则搭配方法数为 \(4\times 3=12\)。
示例解释:上衣选定后,裤子仍有 3 种可能;每件上衣都能和 3 条裤子搭配,所以总数是乘法。
3. 补集计数
若总数为 \(N\),不合法对象数为 \(M\),则合法对象数为
\[ N-M. \]
前置:集合补集、加法原理。
定理解释:有些正面直接数很麻烦,但“总数减去坏情况”反而更容易。这就是补集思想,也是组合里最常见的转化之一。
示例:5 位二进制串共有 \(2^5=32\) 个,其中全 0 只有 1 个,所以至少出现一个 1 的串有 \(32-1=31\) 个。
示例解释:直接去数“至少一个 1”不如反过来数“不含 1”,因为坏情况只有一个。
4. 分类计数与分步计数
复杂计数问题常可拆为“按类别求和”或“按步骤求积”。
\[ \#X=\sum_i \#X_i,\qquad \#Y=\prod_i a_i. \]
前置:加法原理、乘法原理。
定理解释:很多题不属于纯粹的“只加”或“只乘”,而是要先分类,再分步;或者先分步,再分类。会拆问题,本身就是组合的核心能力。
示例:求三位数中各位数字和为 5 的个数,可以按百位取值分类,再数后两位的分配。
示例解释:因为百位不能为 0,所以直接统一处理不方便;先按百位分类后,每一类都变成更简单的小问题。
5. 一一对应保数原则
若集合 \(A,B\) 间存在双射,则
\[ |A|=|B|. \]
前置:集合、函数、双射概念。
定理解释:如果两个对象集合能一一对应起来,那么它们的个数就一样。很多漂亮的组合证明,本质上就是在构造这种对应。
示例:从 \(n\) 个元素中选 \(k\) 个,与从同一集合中删去 \(k\) 个元素后一一对应,因此 \(\binom{n}{k}=\binom{n}{n-k}\)。
示例解释:选出 \(k\) 个元素,等价于留下 \(k\) 个元素,也等价于删去其余 \(n-k\) 个元素,所以两边计数相等。
6. 双计数原理 中档核心
同一对象集按两种方式计数,所得结果相等。
\[ \sum_{x\in X} f(x)=\sum_{y\in Y} g(y). \]
前置:加法原理、集合划分。
定理解释:双计数的核心是:同一批对象,不同角度去数,答案必须一样。它是许多组合恒等式和图论结论的来源。
示例:在一个含 \(m\) 条边的图中,所有顶点度数之和等于 \(2m\)。
示例解释:按边看,每条边贡献 2 个端点;按点看,每个点贡献自己的度数。两种数法都在数“边端点总数”。

二、排列、组合与多重计数

这一部分进入最经典的排列组合公式,也是高中竞赛组合的基本工具箱。
7. 排列数公式
\[ A_n^k=\frac{n!}{(n-k)!}. \]
前置:乘法原理、有序选择。
定理解释: 排列数研究的是:从 \(n\) 个不同对象中,按顺序取出 \(k\) 个,一共有多少种不同取法。 这里“按顺序”非常关键,因为先选谁、后选谁,会被看成不同结果。 所以这个问题本质上是一个分步计数问题: 第一步选第一个位置,有 \(n\) 种; 第二步选第二个位置,剩下 \(n-1\) 种; ……; 第 \(k\) 步选第 \(k\) 个位置,剩下 \(n-k+1\) 种。 因此总数为 \[ n(n-1)\cdots(n-k+1), \] 这正好可以写成 \[ \frac{n!}{(n-k)!}. \] 这个公式可以理解为“从 \(n!\) 里截出前 \(k\) 个递减因子”。 它是排列组合里最基础的计数公式之一,也是后面组合数、多项式系数等内容的起点。
示例: 从 5 个人中选出 3 人排成一列,有 \[ A_5^3=5\times4\times3=60 \] 种。
示例解释: 第一位可以从 5 个人中任选 1 人; 选完以后,第二位只能从剩下的 4 个人里选; 再选完以后,第三位只能从剩下的 3 个人里选。 所以总数是 \[ 5\times4\times3=60. \] 注意这里如果只是“选 3 个人组成小组”,那就不是排列,而是组合,因为顺序已经不重要了。 所以排列数的本质特征就是:**同样的人,只要次序不同,就算不同方案。**
8. 组合数公式
\[ \binom{n}{k}=\frac{n!}{k!(n-k)!}. \]
前置:排列与无序选择、除重思想。
定理解释: 组合数研究的是:从 \(n\) 个不同对象中,不计顺序地选出 \(k\) 个,一共有多少种选法。 和排列不同,这里只关心“选了哪些对象”,不关心它们的先后顺序。 因此一个自然想法是: 先按排列数来算,再把那些只是顺序不同、但本质上属于同一组的情况合并。 从 \(n\) 个对象中取出 \(k\) 个并排好顺序,共有 \[ A_n^k=\frac{n!}{(n-k)!} \] 种。 但对于任意一组固定的 \(k\) 个对象,它们内部可以互换顺序,共有 \[ k! \] 种排列,而这些排列在组合意义下其实都代表同一个集合。 所以组合数应当是排列数再除以 \(k!\),于是得到 \[ \binom{n}{k}=\frac{n!}{k!(n-k)!}. \] 这条公式的核心思想,就是“先多算,再除重”。
示例: 从 5 个人中选 2 个人组成小组,有 \[ \binom52=10 \] 种。
示例解释: 如果先按顺序选两个人,那么有 \[ A_5^2=5\times4=20 \] 种。 但比如“甲乙”和“乙甲”在组成小组这件事里并没有区别,所以每一组被重复计算了 \[ 2!=2 \] 次。 因此真实的无序选法应为 \[ \frac{20}{2}=10. \] 这正体现了组合与排列最本质的区别:**排列看顺序,组合不看顺序。**
9. Pascal 恒等式
\[ \binom{n}{k}=\binom{n-1}{k}+\binom{n-1}{k-1}. \]
前置:组合数定义、分类讨论、固定元素思想。
定理解释: Pascal 恒等式是组合数最核心的递推关系之一。 它告诉我们:从 \(n\) 个元素中选 \(k\) 个,可以按照某个固定元素“选不选”来分成两类。 设这个固定元素是最后一个元素。 那么所有的 \(k\) 元子集要么不包含它,要么包含它。 若不包含它,就只能从剩下的 \(n-1\) 个元素中选 \(k\) 个,共有 \[ \binom{n-1}{k} \] 种; 若包含它,那么还需要从其余 \(n-1\) 个元素中再选 \(k-1\) 个,共有 \[ \binom{n-1}{k-1} \] 种。 两类互不重叠,合起来就是全部情况,所以得到 \[ \binom{n}{k}=\binom{n-1}{k}+\binom{n-1}{k-1}. \] 这条恒等式不仅是 Pascal 三角形的来源,也是在证明很多组合恒等式和递推公式时最基础的工具之一。
示例: \[ \binom52=\binom42+\binom41=6+4=10. \]
示例解释: 例如从 5 个人里选 2 个人,固定看第 5 个人。 如果不选他,那么就在前 4 个人里选 2 人,有 \[ \binom42=6 \] 种; 如果选他,那么还要从前 4 个人里再选 1 人,有 \[ \binom41=4 \] 种。 这两类加起来就是总数 \[ 6+4=10. \] 所以 Pascal 恒等式背后的直觉非常简单:**把一个计数问题按某个固定对象是否出现来拆成两半。**
10. 对称性公式
\[ \binom{n}{k}=\binom{n}{n-k}. \]
前置:组合数定义、补集思想、一一对应。
定理解释: 这条公式说明:从 \(n\) 个元素中选出 \(k\) 个,与从 \(n\) 个元素中舍去 \(n-k\) 个,本质上是同一件事。 选中一组 \(k\) 元子集以后,它的补集自然是一个 \(n-k\) 元子集; 反过来,给定一个 \(n-k\) 元子集,它的补集也唯一对应一个 \(k\) 元子集。 因此两类对象之间存在天然的一一对应,所以数量相同。 这条公式看起来简单,但非常重要,因为它说明组合数在 Pascal 三角形中左右对称,也常常能把一个不好算的问题转成一个更方便的参数形式。
示例: \[ \binom73=\binom74=35. \]
示例解释: 从 7 个元素里选 3 个,等价于从 7 个元素里删去 4 个; 这两种操作最后都唯一确定同一个子集。 所以“选 3 个”的方案数,和“删 4 个”的方案数完全一样。 这就是为什么 \[ \binom73=\binom74. \] 从直观上看,这条对称性也说明:组合数并不是单纯地随着 \(k\) 增大而一直变化,而是围绕中间层对称分布的。
11. 多项式系数
\[ \binom{n}{a_1,a_2,\dots,a_r}=\frac{n!}{a_1!a_2!\cdots a_r!}, \qquad a_1+\cdots+a_r=n. \]
前置:排列数、分组思想、组合数的推广。
定理解释: 多项式系数可以看作组合数的自然推广。 普通组合数 \(\binom{n}{k}\) 只是把 \(n\) 个对象分成两组:一组大小为 \(k\),另一组大小为 \(n-k\)。 而多项式系数则允许把 \(n\) 个不同对象分成 \(r\) 组,且各组大小分别固定为 \[ a_1,a_2,\dots,a_r. \] 若先把这 \(n\) 个对象排成一列,有 \(n!\) 种排法; 但由于同一组内部的顺序不重要,所以第 1 组内部要除以 \(a_1!\),第 2 组内部要除以 \(a_2!\),……,第 \(r\) 组内部要除以 \(a_r!\)。 因而总方法数为 \[ \frac{n!}{a_1!a_2!\cdots a_r!}. \] 这个量也正是多项式展开中对应项的系数,所以叫作“多项式系数”。
示例: 把 5 个不同球分成 \(2,2,1\) 三组,有 \[ \frac{5!}{2!2!1!}=30 \] 种。
示例解释: 若先把 5 个球全部排成一行,则有 \[ 5! \] 种排法。 但如果前两个球属于同一组,那么它们交换顺序并不会改变分组结果,所以这一组内部多算了 \(2!\) 次; 第二个 2 人组同理,也多算了 \(2!\) 次; 单独那一组只有 1 个元素,不需要调整。 因此要除以 \[ 2!2!1!. \] 这个公式在“分组”“颜色分配”“多项式展开系数”等问题里都非常常见。
12. 圆排列公式
将 \(n\) 个互异对象排成一圈的方法数为
\[ (n-1)!. \]
前置:排列数、旋转等价、等价类思想。
定理解释: 在线性排列中,顺序从左到右完全固定,因此 \(n\) 个对象共有 \(n!\) 种排法。 但在圆排列中,整体转动一圈不会产生新排法,因为相对位置并没有改变。 也就是说,一个圆排列在写成线性序列时,会因为起点不同而对应出 \(n\) 个看似不同、实际上完全相同的表示。 因此圆排列的总数应当把线性排列数 \[ n! \] 再除以 \(n\),得到 \[ \frac{n!}{n}=(n-1)!. \] 这条公式本质上是在“按旋转去重”。 所以它和普通排列最大的不同就在于:**绝对起点不重要,只看相对次序。**
示例: 4 个人围成一圈坐,有 \[ (4-1)!=6 \] 种。
示例解释: 若按直线排,4 个人共有 \[ 4!=24 \] 种。 但例如 \[ A,B,C,D;\quad B,C,D,A;\quad C,D,A,B;\quad D,A,B,C \] 这 4 个线性表示,在围成一圈时其实是同一种排法,因为它们只是整体转动了而已。 因此每一个圆排列在直线表示里都会被重复数 \(4\) 次,所以真实的圆排列数应为 \[ \frac{24}{4}=6. \] 这就是圆排列公式的来源。
13. 可重组合(插板法) 常用
非负整数解个数
\[ x_1+x_2+\cdots+x_r=n \]
等于
\[ \binom{n+r-1}{r-1}. \]
前置:组合数、隔板法、相同物品分配。
定理解释: 这个公式研究的是:把 \(n\) 个完全相同的物品分给 \(r\) 个人或 \(r\) 个盒子,允许有人一个也分不到,那么分配方法共有多少种。 设第 \(i\) 个人分到 \(x_i\) 个物品,那么问题就转化成求非负整数解个数 \[ x_1+x_2+\cdots+x_r=n. \] 插板法的思想是:先把 \(n\) 个相同物品排成一排,把它们看成 \(n\) 个球; 然后用 \(r-1\) 块板把它们切成 \(r\) 段,每一段长度就是对应的 \(x_i\)。 于是问题变成:在总共 \[ n+r-1 \] 个位置里,选出 \(r-1\) 个位置放板。 因此方法数就是 \[ \binom{n+r-1}{r-1}. \] 这条公式是竞赛组合里极高频的工具之一,凡是“相同物品分配”或“非负整数解计数”几乎都会想到它。
示例: 非负整数解 \[ x_1+x_2+x_3=5 \] 的个数为 \[ \binom{7}{2}=21. \]
示例解释: 这里可以把 5 个单位写成 \[ \circ\ \circ\ \circ\ \circ\ \circ \] ,再插入 2 块板,把它们分成 3 段。 比如 \[ \circ\ \circ\ |\ |\ \circ\ \circ\ \circ \] 就对应 \[ x_1=2,\quad x_2=0,\quad x_3=3. \] 因为一共有 5 个球和 2 块板,共 7 个位置,选择其中 2 个位置放板即可,所以总方法数是 \[ \binom72=21. \] 这也说明:允许某个变量为 0,本质上就是允许某一段长度为 0。
14. 正整数解个数
正整数解个数
\[ x_1+x_2+\cdots+x_r=n,\qquad x_i\ge 1 \]
等于
\[ \binom{n-1}{r-1}. \]
前置:可重组合、变量平移、插板法。
定理解释: 和前一条不同,这里要求每个变量都至少为 1,也就是说每一份都不能为空。 处理这种条件时,最常见的方法是先给每个变量“保底分配”一个单位。 设 \[ y_i=x_i-1, \qquad y_i\ge 0, \] 那么原方程 \[ x_1+x_2+\cdots+x_r=n \] 就变成 \[ y_1+y_2+\cdots+y_r=n-r. \] 这时问题已经化成一个标准的非负整数解计数问题,因此答案为 \[ \binom{(n-r)+r-1}{r-1}=\binom{n-1}{r-1}. \] 所以这条公式的本质,就是把“正整数限制”通过平移转换成“非负整数限制”。
示例: 正整数解 \[ x_1+x_2+x_3=5 \] 的个数为 \[ \binom42=6. \]
示例解释: 因为每个变量都至少为 1,所以先令 \[ y_1=x_1-1,\quad y_2=x_2-1,\quad y_3=x_3-1. \] 那么 \[ y_1+y_2+y_3=2,\qquad y_i\ge0. \] 于是答案就变成非负整数解个数: \[ \binom{2+3-1}{3-1}=\binom42=6. \] 从插板法角度也可以理解为: 因为每一段都必须至少有一个球,所以先把 5 个球中拿出 3 个,分别放进三段里保底; 剩下 2 个球再自由分配。 所以这条公式本质上是前一条公式的一个直接变形。

三、二项式定理与经典恒等式

这一部分是恒等式、组合证明、双计数题的高频来源,也是很多竞赛组合题的骨架。
15. 二项式定理 基础核心
\[ (x+y)^n=\sum_{k=0}^{n}\binom{n}{k}x^{n-k}y^k. \]
前置:组合数、乘法原理。
定理解释:展开 \((x+y)^n\) 时,每个因子都要从 \(x\) 与 \(y\) 中选一个。若最终有 \(k\) 个 \(y\),就有 \(n-k\) 个 \(x\),而出现这种情况的方法数正是 \(\binom{n}{k}\)。
示例:\[ (x+y)^3=x^3+3x^2y+3xy^2+y^3. \]
示例解释:例如 \(x^2y\) 这一项表示 3 个括号中有 1 个括号取 \(y\)、其余取 \(x\),位置有 \(\binom31=3\) 种。
16. Vandermonde 恒等式
\[ \sum_{k=0}^{r}\binom{m}{k}\binom{n}{r-k}=\binom{m+n}{r}. \]
前置:组合数、双计数。
定理解释:从两堆元素(第一堆 \(m\) 个,第二堆 \(n\) 个)里共选出 \(r\) 个,可以按“从第一堆选了多少个”来分类。
示例:\[ \binom31\binom42+\binom32\binom41+\binom33\binom40=\binom73. \]
示例解释:从 3 个红球和 4 个蓝球中共选 3 个,既可以按颜色分类去数,也可以直接从 7 个球里选 3 个去数。
17. Hockey-stick 恒等式
\[ \binom{r}{r}+\binom{r+1}{r}+\cdots+\binom{n}{r}=\binom{n+1}{r+1}. \]
前置:Pascal 恒等式。
定理解释:这条恒等式在 Pascal 三角形中呈“冰球杆”形状,所以得名。它表示一串斜向组合数求和,可以压成一个更大的组合数。
示例:\[ \binom22+\binom32+\binom42+\binom52=\binom63. \]
示例解释:左边是 \(1+3+6+10=20\),右边 \(\binom63=20\)。它也能用不断应用 Pascal 恒等式来理解。
18. 二项式求和
\[ \sum_{k=0}^{n}\binom{n}{k}=2^n, \qquad \sum_{k=0}^{n}k\binom{n}{k}=n2^{n-1}. \]
前置:二项式定理、求导或组合计数。
定理解释:第一式表示:每个元素都可选可不选,所以所有子集个数是 \(2^n\)。第二式表示:统计所有子集中“元素出现的总次数”。
示例:当 \(n=3\) 时,\(\binom30+\binom31+\binom32+\binom33=8\)。
示例解释:因为 3 元集合共有 \(2^3=8\) 个子集。第二个公式则可以理解成:每个固定元素在一半子集中出现,所以总贡献为 \(n2^{n-1}\)。
19. 交错二项式和
\[ \sum_{k=0}^{n}(-1)^k\binom{n}{k}=0 \quad (n\ge 1). \]
前置:二项式定理。
定理解释:把二项式定理中的 \(x=1,y=-1\) 代入,就得到这个交错和为 0。它反映了偶数大小子集与奇数大小子集数量相同。
示例:当 \(n=4\) 时,\(1-4+6-4+1=0\)。
示例解释:这正是 \((1-1)^4=0\) 的展开式。也可理解成:4 元集合的偶数子集数与奇数子集数一样多。
20. 平方和恒等式
\[ \sum_{k=0}^{n}\binom{n}{k}^2=\binom{2n}{n}. \]
前置:Vandermonde 恒等式。
定理解释:从两个各有 \(n\) 个元素的集合中一共选 \(n\) 个,若第一堆选了 \(k\) 个,则第二堆必须选 \(n-k\) 个,于是得到平方和形式。
示例:当 \(n=2\) 时,\[ \binom20^2+\binom21^2+\binom22^2=1+4+1=6=\binom42. \]
示例解释:左边看似是代数恒等式,实则是一个非常典型的双计数:从两组共 4 个元素中选 2 个。
21. 吸收恒等式
\[ k\binom{n}{k}=n\binom{n-1}{k-1}. \]
前置:组合数公式。
定理解释:这条式子常用于把“乘一个 \(k\)”变成“改一下组合数参数”。本质上是在数“选出一个 \(k\) 元子集后,再在其中指定一个特殊元素”的方法数。
示例:\[ 2\binom52=5\binom41. \]
示例解释:左边表示先从 5 人中选 2 人,再在这 2 人中指定一人;右边表示先指定这个特殊人,再从剩下 4 人中选 1 人配成一组。

四、容斥原理与错排问题

这一部分是“至少一个”“都不满足”“恰好若干个”一类问题的核心工具。
22. 两集合容斥
\[ |A\cup B|=|A|+|B|-|A\cap B|. \]
前置:集合运算、加法原理。
定理解释:直接把 \(|A|\) 和 \(|B|\) 相加时,交集部分被数了两次,因此要减去一次。
示例:班里会英语的有 20 人,会法语的有 15 人,同时会两种语言的有 6 人,则至少会一种语言的有 \(20+15-6=29\) 人。
示例解释:那 6 个都会的人在“会英语”和“会法语”里各算过一次,所以总和里重复了。
23. 三集合容斥
\[ |A\cup B\cup C| =|A|+|B|+|C| -|A\cap B|-|B\cap C|-|C\cap A| +|A\cap B\cap C|. \]
前置:两集合容斥。
定理解释:三集合时,先把单集合加起来,再减去所有两两交集;但这一步会把三重交集减多一次,所以最后要再补回来。
示例:若 \(|A|=10,|B|=12,|C|=9\),两两交分别是 3、4、2,三者交是 1,则并集大小为 \(10+12+9-3-4-2+1=23\)。
示例解释:三重交集最开始被加了 3 次,减两两交时又减了 3 次,最后变成 0 次,所以还要再加 1 次。
24. 一般容斥原理 核心
\[ \left|\bigcup_{i=1}^{n}A_i\right| =\sum |A_i|-\sum |A_i\cap A_j| +\sum |A_i\cap A_j\cap A_k| -\cdots+(-1)^{n+1}\left|\bigcap_{i=1}^{n}A_i\right|. \]
前置:数学归纳法、集合运算。
定理解释:一般容斥就是“单个集合加、两两交减、三重交加……”这样交替下去。它解决的是多个条件同时出现时的重复计数问题。
示例:求 \(1\) 到 \(100\) 中能被 \(2\) 或 \(3\) 或 \(5\) 整除的数的个数,就可以用容斥来做。
示例解释:先数能被 2、3、5 整除的,再减去能被 6、10、15 整除的,最后补回能被 30 整除的。
25. 错排公式
记错排数为 \(D_n\),则
\[ D_n=n!\sum_{k=0}^{n}\frac{(-1)^k}{k!}. \]
\[ D_n=(n-1)(D_{n-1}+D_{n-2}). \]
前置:容斥原理、递推。
定理解释:错排问题要求每个元素都不回到原位,是容斥原理的经典应用;递推式则来自考察第一个元素换到了哪里。
示例:\(n=3\) 时,\(D_3=2\)。
示例解释:3 个元素的错排只有 \((2,3,1)\) 与 \((3,1,2)\) 两种;任何有元素留在原位的排列都不算。
26. 满射计数公式
从 \(n\) 元集合到 \(m\) 元集合的满射个数为
\[ \sum_{k=0}^{m}(-1)^k\binom{m}{k}(m-k)^n. \]
前置:容斥原理、函数计数。
定理解释:总函数数是 \(m^n\)。若要求满射,就要排除“至少有一个值域元素没被用到”的函数,因此自然引出容斥。
示例:从 3 元集合到 2 元集合的满射个数为 \(2^3-\binom21 1^3=8-2=6\)。
示例解释:一共 8 个函数;若不是满射,则只落到单个元素上,这样的函数共有 2 个,所以满射有 6 个。

五、抽屉原理与极值思想

这一部分常常不靠复杂计算,而是靠“位置不够分”或“规模一大必出结构”来得到结论。
27. 基本抽屉原理 入门核心
若将 \(n+1\) 个物体放入 \(n\) 个抽屉,则至少有一个抽屉中不少于 \(2\) 个物体。
前置:整数大小比较。
定理解释:位置不够分时,重复一定会发生。它是最基础、也最常用的存在性结论之一。
示例:把 13 个人分到 12 个月份里,至少有两个人出生在同一个月。
示例解释:因为月份只有 12 个“抽屉”,而人有 13 个,必然有一个月份里至少装下 2 个人。
28. 广义抽屉原理
若将 \(N\) 个物体放入 \(m\) 个抽屉,则至少有一个抽屉中物体数不少于
\[ \left\lceil \frac{N}{m}\right\rceil. \]
前置:整除与上取整。
定理解释:如果想让每个抽屉都尽量少装,那么最理想也是尽量平均分配;这样仍然会有一个抽屉至少达到平均数的上取整。
示例:把 100 个球放入 9 个盒子,至少有一个盒子中不少于 \(\lceil 100/9\rceil=12\) 个球。
示例解释:若每个盒子都至多 11 个,那么总数最多 \(9\times11=99\),还装不下 100 个球,所以至少有一个盒子达到 12 个。
29. Erdős–Szekeres 单调子序列定理 经典
任意 \(n^2+1\) 个互异实数构成的序列中,必存在长度至少 \(n+1\) 的单调递增子序列或单调递减子序列。
前置:抽屉原理、序列比较思想。
定理解释:这条定理说明:一个足够长的序列,不可能同时“没有很长的上升子序列”又“没有很长的下降子序列”。规模一大,结构必然出现。
示例:任意 10 个互异实数组成的序列中,一定存在长度至少 4 的单调递增子序列或单调递减子序列。
示例解释:因为这里取 \(n=3\),有 \(n^2+1=10\)。所以只要序列长度达到 10,就必定出现一个长度至少 4 的单调子序列。

六、递推关系与常见数列

这一部分开始进入“用递推描述结构”的组合思路。很多计数对象不能一步写出公式,但可以先写出递推。
31. Fibonacci 递推
\[ F_n=F_{n-1}+F_{n-2},\qquad F_0=0,\ F_1=1. \]
前置:递推定义、分类讨论、最后一步分析。
定理解释: Fibonacci 递推是最经典、也最值得孩子反复体会的一类递推关系。 它的核心思想不是“背公式”,而是学会看出:一个长度为 \(n\) 的结构,往往可以按“最后一段长什么样”分成两类,而这两类正好分别对应规模更小的两个同类问题。 于是,大问题就自然拆成前两个小问题之和。 这类递推最常出现在:铺砖、台阶、禁邻选择、线性串构造、二元串限制等题型中。 它传达的一个非常重要的组合思想是:把复杂对象按最后一步拆开。 在竞赛组合里,很多看上去花样很多的题,最后本质上都在做类似的事情,只不过拆分方式不一定恰好是“前一项 + 前两项”而已。
示例: 用 \(1\times1\) 和 \(1\times2\) 小砖铺满长度为 \(n\) 的线段,设方案数为 \(a_n\)。 则有 \[ a_n=a_{n-1}+a_{n-2}. \]
示例解释: 因为最右边最后一块只有两种可能: 第一种,最后放的是一块 \(1\times1\) 小砖,那么前面剩下长度 \(n-1\) 的部分,有 \(a_{n-1}\) 种铺法; 第二种,最后放的是一块 \(1\times2\) 小砖,那么前面剩下长度 \(n-2\) 的部分,有 \(a_{n-2}\) 种铺法。 这两类情况互不重叠,而且已经把所有可能都分完了,所以总方案数就是两者相加。 这正是 Fibonacci 递推最标准、最直观的来源。
32. 线性齐次递推的一般形式
若数列满足
\[ a_n=c_1a_{n-1}+c_2a_{n-2}+\cdots+c_ka_{n-k}, \]
则称其为常系数线性齐次递推数列。
前置:递推、代数基本知识、数列表示。
定理解释: 这是一大类非常重要的递推模型。它的意思是:当前这一项 \(a_n\),可以由前面有限项按固定系数线性组合出来。 “线性”表示没有 \(a_{n-1}^2\)、\(a_{n-1}a_{n-2}\) 这类乘积项; “齐次”表示右边没有额外常数项或独立函数项; “常系数”表示 \(c_1,c_2,\dots,c_k\) 不随 \(n\) 改变。 这一类递推在组合中非常常见,因为很多计数对象的构造,只依赖于前几步的状态,而这种依赖方式往往又是“分类后直接相加”。 从学习角度看,它是 Fibonacci 递推的推广版:Fibonacci 只是其中最简单的二阶特例。 理解这一条,孩子就会慢慢意识到:递推并不是零散结论,而是一整套统一框架。
示例: 若 \[ a_n=a_{n-1}+a_{n-3}, \] 那么这就是一个三阶线性齐次递推。
示例解释: 这里虽然只出现了 \(a_{n-1}\) 和 \(a_{n-3}\),没有出现 \(a_{n-2}\),但它仍属于三阶递推,因为当前项的计算涉及最远到前三项。 若写成统一格式,其实就是 \[ a_n=1\cdot a_{n-1}+0\cdot a_{n-2}+1\cdot a_{n-3}. \] 所以它完全落在线性齐次递推的一般框架中。 这也是为什么很多时候“有没有出现某一项”并不重要,关键在于整个结构是不是“固定系数线性组合前若干项”。
33. 特征方程法
对形如
\[ a_n=c_1a_{n-1}+\cdots+c_ka_{n-k} \]
的递推,可设 \(a_n=r^n\),得到特征方程
\[ r^k-c_1r^{k-1}-\cdots-c_k=0. \]
前置:线性递推、多项式、指数型试探。
定理解释: 特征方程法是处理常系数线性齐次递推最经典的代数工具。 它背后的想法非常自然:既然递推是“前几项的固定线性组合”,那么指数型数列 \(r^n\) 往往是最适合试探的对象,因为它往后平移一项,只会多乘一个固定因子 \(r\)。 把 \(a_n=r^n\) 代入递推后,就能把一个“数列问题”压缩成一个“代数方程问题”。 一旦找到所有特征根,再按根的情况拼出通解,就能把原来的递推数列写成显式公式。 对孩子来说,这一步特别重要,因为它让“递推”从一种看似只能逐项往后推的关系,变成一种可以整体求解的对象。
示例: Fibonacci 递推 \[ F_n=F_{n-1}+F_{n-2} \] 的特征方程是 \[ r^2-r-1=0. \]
示例解释: 因为设 \(F_n=r^n\),代入得 \[ r^n=r^{n-1}+r^{n-2}. \] 两边同时除以 \(r^{n-2}\)(默认 \(r\neq 0\)),得到 \[ r^2=r+1, \] 也就是 \[ r^2-r-1=0. \] 这说明 Fibonacci 数列背后并不是“凭空出现”的,而是对应于两个特征根所生成的指数型解的线性组合。 所以后面看到通项里出现 \(\left(\frac{1+\sqrt5}{2}\right)^n\) 这类式子,就不会觉得突兀了。
34. 二阶递推的通解结构
\[ a_n=pa_{n-1}+qa_{n-2}, \]
则其通解由特征方程 \(r^2-pr-q=0\) 的根决定。
前置:特征方程法、二次方程求根。
定理解释: 二阶递推是最常见、也最容易系统掌握的一类线性递推。 它的核心结论是:递推的解长什么样,完全取决于特征方程的根长什么样。 若有两个不同实根 \(r_1,r_2\),通解一般写成 \[ a_n=A r_1^n+B r_2^n; \] 若出现重根 \(r\),则通解一般写成 \[ a_n=(A+Bn)r^n. \] 所以,根的重合与否,会直接决定通项结构有没有额外的 \(n\) 因子。 这也是为什么在递推题里,“重根”总是一个特别值得单独记住的情况。
示例: 若 \[ a_n=2a_{n-1}-a_{n-2}, \] 则特征方程为 \[ r^2-2r+1=0, \] 即 \[ (r-1)^2=0. \] 所以通解形如 \[ a_n=A+Bn. \]
示例解释: 因为这里的唯一特征根是 \(r=1\),而且是重根。 若只有一个简单根 \(1\),那么只会得到常数解 \(A\cdot1^n=A\)。 但这不足以覆盖全部解,所以还必须补上一项 \(Bn\cdot1^n\),也就是 \(Bn\)。 因此通解变成 \[ a_n=A+Bn. \] 这一点和微分方程里“重根时要乘 \(n\)”是非常类似的。 从结构上看,重根意味着递推解的自由度还没“填满”,于是需要多一个带 \(n\) 的项来补足。
35. Catalan 型递推思想
很多递推可由“按第一个结构块切分”得到卷积型公式。
\[ a_n=\sum_{k} a_k a_{n-1-k}. \]
前置:递推、分类讨论、组合拆分、卷积思想。
定理解释: 这一类递推和 Fibonacci 型递推的区别在于:它不再只是“拆成前一项和前两项”,而是把一个对象拆成“左半边 + 一个中心结构 + 右半边”。 一旦这个中心结构的位置不固定,就会出现对所有切分位置求和,于是形成卷积型递推。 Catalan 数列就是这类递推最有代表性的主角。 它经常出现在:合法括号序列、二叉树、凸多边形三角剖分、Dyck 路径、不交弦匹配等题型中。 从方法上说,它教孩子学会看: 一个对象能不能通过某个“第一关键结构”切开,切开后左右两部分是否独立。 一旦独立,乘法就会出现;一旦切分位置可变,求和就会出现。
示例: 合法括号序列、二叉树个数、Dyck 路径个数都满足 Catalan 型递推。
示例解释: 以合法括号序列为例,若总共有 \(n\) 对括号,最左边那个左括号一定会和某个右括号配对。 一旦这个最外层配对确定下来,整个序列就被分成“里面一段”和“后面一段”两个互相独立的合法括号序列。 假设里面用了 \(k\) 对括号,那么后面就用了 \(n-1-k\) 对括号,于是该种切分对应的方案数是 \[ a_k a_{n-1-k}. \] 把所有可能的 \(k\) 全部加起来,就得到卷积型递推。 所以 Catalan 型递推真正的本质不是某个特定公式,而是“先找第一个关键结构,再把问题一刀切成两半”。
36. Stirling 数(第二类)递推
把 \(n\) 个元素划分成 \(k\) 个非空无序块的方式数记为 \(S(n,k)\),则
\[ S(n,k)=S(n-1,k-1)+kS(n-1,k). \]
前置:集合划分、递推、分类讨论。
定理解释: 第二类 Stirling 数 \(S(n,k)\) 数的是:把 \(n\) 个不同元素分成 \(k\) 个非空、彼此无序的块。 这类递推特别适合训练孩子“新增一个元素时,原有结构怎样变化”的思路。 这里新增的元素是 \(n\)。对于它,只有两种可能: 要么它自己单独成一块; 要么它加入到已有的某一块中。 于是整个问题就被非常自然地分成两类,而且这两类一看就是递推。 这条递推是集合划分问题中最基本、最经典的一条。
示例: \[ S(3,2)=3. \]
示例解释: 把集合 \(\{1,2,3\}\) 分成 2 个非空块,只有以下三种: \[ \{1\}\{2,3\},\qquad \{2\}\{1,3\},\qquad \{3\}\{1,2\}. \] 若从递推角度看,也可以这样理解: 先看元素 3。 若 3 单独成一块,那么前面 \(\{1,2\}\) 必须分成 \(1\) 块,对应 \(S(2,1)\); 若 3 不单独成块,那就必须加入 \(\{1,2\}\) 已经分成的 2 块中的某一块,但这里 \(S(2,2)=1\),且有 2 个块可选,所以贡献为 \(2S(2,2)\)。 因而 \[ S(3,2)=S(2,1)+2S(2,2)=1+2=3. \]
37. Stirling 数(第一类)递推
把 \(n\) 个元素分解成 \(k\) 个轮换的方式数记为 \(c(n,k)\),则
\[ c(n,k)=c(n-1,k-1)+(n-1)c(n-1,k). \]
前置:排列的轮换分解、递推、插入思想。
定理解释: 第一类 Stirling 数和第二类 Stirling 数名字很像,但数的对象完全不同。 第二类是在数“集合如何分块”; 第一类是在数“排列分解成多少个轮换”。 因此它不是普通的集合划分问题,而是带有排列循环结构的问题。 这条递推也来自对新增元素 \(n\) 的分析: 要么 \(n\) 自己单独形成一个 1-轮换; 要么 \(n\) 插入到原来某个轮换中的某个位置。 因为 \(n-1\) 个旧元素在所有轮换里总共有 \(n-1\) 个可插位置,所以就得到 \((n-1)c(n-1,k)\) 这一项。
示例: 在讨论排列的轮换结构时,常出现第一类 Stirling 数。
示例解释: 例如要数 3 个元素的排列恰好分成 2 个轮换的个数,就已经是第一类 Stirling 数的问题。 它和“把 3 个元素分成 2 块”不是一回事,因为这里每一块内部还带有轮换顺序信息。 这也是为什么它的递推虽然长得和第二类 Stirling 数很像,但系数却不同: 第二类是“加入某个块”,所以是 \(k\); 第一类是“插入某个轮换位置”,所以是 \(n-1\)。 这一点特别值得孩子分清楚。
38. Bell 数递推
Bell 数 \(B_n\) 表示 \(n\) 元集合的全部划分数。
\[ B_{n+1}=\sum_{k=0}^{n}\binom{n}{k}B_k. \]
前置:集合划分、第二类 Stirling 数、分类计数。
定理解释: Bell 数表示:一个 \(n\) 元集合一共能分成多少种不同的非空块划分。 如果说第二类 Stirling 数 \(S(n,k)\) 是“固定块数”的划分,那么 Bell 数就是把所有可能的块数全部加总起来。 它反映的是集合划分问题的“总复杂度”。 这条递推的一个经典理解是:考虑新元素 \(n+1\) 所在的那个块里,除了它自己之外,还包含哪些旧元素。 一旦选定这批元素,剩下的元素就可以任意划分,于是得到求和公式。 这种“先盯住某个特殊元素所在的块”也是组合里非常典型的切入方式。
示例: \[ B_3=5. \]
示例解释: 因为集合 \(\{1,2,3\}\) 的所有划分共有 5 种: \[ \{1,2,3\}, \qquad \{1\}\{2,3\}, \qquad \{2\}\{1,3\}, \qquad \{3\}\{1,2\}, \qquad \{1\}\{2\}\{3\}. \] 从递推角度理解 \(B_{n+1}\) 时,可以固定元素 \(n+1\)。 假设它所在的块里还选了 \(n-k\) 个旧元素,那么剩下的 \(k\) 个元素可以任意划分,共有 \(B_k\) 种; 而选出这 \(k\) 个“留在外面”的元素有 \(\binom{n}{k}\) 种方式。 所以对所有 \(k\) 求和,就得到 \[ B_{n+1}=\sum_{k=0}^{n}\binom{n}{k}B_k. \] 这条公式很好地体现了 Bell 数的本质:它是在对“所有块数、所有划分结构”做一次总汇总。

七、生成函数入门

生成函数把数列变成幂级数,从而把计数问题变成代数运算问题。
39. 普通生成函数定义
数列 \(\{a_n\}\) 的普通生成函数定义为
\[ A(x)=\sum_{n\ge0}a_nx^n. \]
前置:幂级数、数列。
定理解释:生成函数的思想是:把“第 \(n\) 项是多少”编码到 \(x^n\) 的系数里。于是数列问题能转化成函数恒等式问题。
示例:常数数列 \(1,1,1,\dots\) 的生成函数是 \(\frac1{1-x}\)。
示例解释:因为 \(\frac1{1-x}=1+x+x^2+\cdots\),每个次数项的系数都正好是 1。
40. 等比级数生成函数
\[ 1+x+x^2+\cdots=\frac1{1-x}. \]
前置:等比数列。
定理解释:这是最基础的生成函数恒等式。很多复杂生成函数,都是由它变形叠加出来的。
示例:\[ 1+x^2+x^4+\cdots=\frac1{1-x^2}. \]
示例解释:把 \(x\) 替换成 \(x^2\),就得到“偶数次数项都为 1、奇数次数项为 0”的生成函数。
41. 生成函数乘法对应卷积
\[ A(x)=\sum a_nx^n,\qquad B(x)=\sum b_nx^n, \]
\[ A(x)B(x)=\sum_{n\ge0}\left(\sum_{k=0}^{n}a_kb_{n-k}\right)x^n. \]
前置:多项式乘法、求和。
定理解释:生成函数相乘时,次数 \(n\) 的系数来自所有“次数和为 \(n\)”的配对,因此自然出现卷积和。
示例:两个独立选择步骤的总计数,常用乘法型生成函数描述。
示例解释:因为“前一部分贡献 \(k\)”与“后一部分贡献 \(n-k\)”的所有可能,都被系数卷积统一装进去了。
42. 插板法的生成函数解释
非负整数解
\[ x_1+\cdots+x_r=n \]
的计数等于
\[ [x^n]\left(\frac1{1-x}\right)^r=\binom{n+r-1}{r-1}. \]
前置:普通生成函数、二项式展开。
定理解释:每个变量 \(x_i\ge0\) 都对应一个生成函数 \(1+x+x^2+\cdots\),多个变量相乘后,\(x^n\) 的系数就是总和为 \(n\) 的解数。
示例:\(x_1+x_2+x_3=4\) 的非负整数解数是 \([x^4](1-x)^{-3}\)。
示例解释:这和插板法的答案一致,只是换成了生成函数语言。
43. 指数生成函数的基本思想
数列 \(\{a_n\}\) 的指数生成函数定义为
\[ E(x)=\sum_{n\ge0}a_n\frac{x^n}{n!}. \]
前置:幂级数、阶乘。
定理解释:指数生成函数更适合处理“带标号对象”的计数,例如排列、集合划分、图等。
示例:集合划分和排列结构里,经常用指数生成函数而不是普通生成函数。
示例解释:因为带标号对象合并时会自然出现二项式系数,而 \(\frac1{n!}\) 正好能把这些组合因子处理得更整齐。
44. Euler 分拆生成函数
\[ \sum_{n\ge 0}p(n)x^n=\prod_{m\ge 1}\frac1{1-x^m}. \]
前置:生成函数、分拆定义。
定理解释:\(p(n)\) 是整数分拆数。每个因子 \(\frac1{1-x^m}=1+x^m+x^{2m}+\cdots\) 表示部分 \(m\) 可以用 0 次、1 次、2 次……
示例:要求 5 的分拆数,可以从这个无限乘积中取出 \(x^5\) 的系数。
示例解释:例如 \(5=2+2+1\) 对应从 \((1+x+x^2+\cdots)(1+x^2+x^4+\cdots)\cdots\) 中取 \(x\cdot x^4\)。

八、分拆理论与 Ferrers 图

整数分拆是组合里很有味道的一块:既有生成函数,也有图形化表示,还有很多漂亮的双射。
45. Euler 奇异分拆定理 经典
“拆成互异部分的分拆数” 等于 “拆成奇数部分的分拆数”。
前置:分拆、生成函数或双射思想。
定理解释:这是分拆理论里最漂亮的恒等式之一。两类看起来完全不同的分拆,最后数量竟然相同。
示例:5 的互异部分分拆有:\(5,4+1,3+2\);奇数部分分拆有:\(5,3+1+1,1+1+1+1+1\),都是 3 种。
示例解释:这不是巧合,而是一般规律。可以用生成函数,也可以用专门的双射来证明。
46. 分拆共轭
Ferrers 图转置给出分拆共轭,因此“最大部分为 \(k\) 的分拆数” 等于 “恰有 \(k\) 个部分的分拆数”。
前置:Ferrers 图。
定理解释:把分拆画成点阵图后,沿主对角线翻转,就把“行信息”变成“列信息”,从而得到一个自然的对应。
示例:\(5=3+1+1\) 的 Ferrers 图共轭后对应 \(5=3+1+1\) 或 \(2+1+1+1\) 这类转置关系。
示例解释:“最大部分”对应图形的最长一行,“部分个数”对应图形的总行数;转置后它们交换角色。
47. Euler 五边形数定理 偏难
\[ \prod_{m\ge 1}(1-x^m) = \sum_{k\in\mathbb Z}(-1)^k x^{k(3k-1)/2}. \]
前置:生成函数、分拆理论。
定理解释:这是分拆理论的一个核心恒等式。右边指数中的 \(k(3k-1)/2\) 是广义五边形数。
示例:它常用于推导分拆函数 \(p(n)\) 的递推公式。
示例解释:表面上这是一个乘积展开式,实际上它决定了分拆数列背后非常深的结构。

九、Catalan 体系与路径计数

Catalan 数是竞赛组合中的高频主角:括号、路径、树、三角剖分,很多对象都由它计数。
48. Catalan 数公式 竞赛高频
\[ C_n=\frac1{n+1}\binom{2n}{n}=\binom{2n}{n}-\binom{2n}{n+1}. \]
前置:组合数、反射法或递推。
定理解释:Catalan 数计数很多“始终不越界”的结构,例如合法括号序列、Dyck 路径、满二叉树等。
示例:\(C_3=5\)。
示例解释:3 对括号的合法匹配共有 5 种,这也是 6 边形剖分成三角形的方法数。
49. Catalan 递推
\[ C_n=\sum_{k=0}^{n-1}C_kC_{n-1-k},\qquad C_0=1. \]
前置:括号匹配、树分裂或路径分解。
定理解释:固定最外层结构后,内部和外部会分成两个独立部分,所以出现卷积递推。
示例:\[ C_3=C_0C_2+C_1C_1+C_2C_0=2+1+2=5. \]
示例解释:最外层括号包住多少对括号,会把问题拆成左右两部分,各自独立计数。
50. Bertrand 投票定理 / Ballot 定理
若候选人 \(A\) 得 \(p\) 票、\(B\) 得 \(q\) 票,且 \(p>q\),则随机计票顺序中 \(A\) 始终领先的比例为
\[ \frac{p-q}{p+q}. \]
前置:路径计数、反射法。
定理解释:投票问题和格点路径一一对应,所以这个结果本质上是“不碰到对角线”的路径计数。
示例:若 \(A\) 有 5 票、\(B\) 有 3 票,则 \(A\) 始终领先的比例是 \(\frac{2}{8}=\frac14\)。
示例解释:每种计票顺序可看作一条向右向上的路径,“始终领先”对应路径始终在某条边界上方。
51. 反射原理
许多“越界路径数”可通过对越界后的第一段进行反射,与另一类路径建立双射。
前置:路径计数、一一对应。
定理解释:反射法是路径计数中的一把利器。它把“坏路径”转成另一类好数的对象,从而用总数减掉坏数。
示例:Catalan 数公式中的 \(\binom{2n}{n}-\binom{2n}{n+1}\) 就可由反射法得到。
示例解释:先数所有路径,再把第一次越界的坏路径反射,发现它们恰好和另一类路径等势。
52. 格点路径计数
从 \((0,0)\) 走到 \((m,n)\),每步只向右或向上,则路径数为
\[ \binom{m+n}{m}=\binom{m+n}{n}. \]
前置:组合数、乘法原理。
定理解释:总共要走 \(m+n\) 步,只需决定其中哪 \(m\) 步是向右,剩下自然向上。
示例:从 \((0,0)\) 到 \((2,3)\) 的路径有 \(\binom52=10\) 条。
示例解释:一共 5 步,其中 2 步选作“向右”,其余 3 步自动是“向上”。

十、组合恒等式与双计数

这一部分更强调“同一件事换个角度数”,是竞赛中非常重要的思维训练区。
53. 子集按大小求和
\[ \sum_{k=0}^{n}\binom{n}{k}=2^n. \]
前置:组合数、子集概念、加法原理与乘法原理。
定理解释: 这是组合里最基础、也最重要的一条恒等式之一。 它表示:一个 \(n\) 元集合的全部子集个数,既可以按“子集大小”来分层统计,也可以按“每个元素选或不选”来整体统计。 如果按大小分层,那么恰有 \(k\) 个元素的子集个数就是 \[ \binom{n}{k}, \] 把 \(k=0,1,2,\dots,n\) 全部加起来,就得到所有子集总数: \[ \sum_{k=0}^{n}\binom{n}{k}. \] 而如果从另一个角度看,对于集合中的每一个元素,我们只有两种选择:选它,或者不选它。 一共 \(n\) 个元素,每个元素都有 2 种状态,因此总子集数应当是 \[ 2\cdot 2\cdots 2=2^n. \] 这条恒等式的本质,就是对同一个对象集进行了两种不同的计数。 它也是二项式定理在 \(x=y=1\) 时最直接的组合解释之一。
示例: 一个 4 元集合共有 \[ 2^4=16 \] 个子集。 同时也可以写成 \[ \binom40+\binom41+\binom42+\binom43+\binom44 =1+4+6+4+1=16. \]
示例解释: 这里的意思是: 空集有 1 个; 1 元子集有 4 个; 2 元子集有 6 个; 3 元子集有 4 个; 4 元子集有 1 个。 这些子集加起来正好是全部子集。 而另一种看法则更直接:4 个元素分别决定“取 / 不取”,因此共有 \(2^4=16\) 种可能。 这就是一个非常典型的“双计数”例子:一边按层分类数,一边按独立选择数。
54. 子集元素总出现次数
\[ \sum_{k=0}^{n}k\binom{n}{k}=n2^{n-1}. \]
前置:双计数、组合数、子集概念。
定理解释: 这条恒等式研究的不是“有多少个子集”,而是“所有子集里一共出现了多少次元素”。 更准确地说,我们把一个 \(n\) 元集合的全部子集都列出来,然后把每个子集中的元素个数加起来,最后得到的总和就是 \[ \sum_{k=0}^{n}k\binom{n}{k}. \] 为什么?因为大小为 \(k\) 的子集一共有 \(\binom{n}{k}\) 个,而每个这样的子集都会贡献 \(k\) 个元素,所以这一层总贡献是 \[ k\binom{n}{k}. \] 再把所有层加起来,就得到左边。 另一方面,我们也可以固定一个元素来看: 对于集合中的任意一个固定元素,它会出现在哪些子集中? 只要先把这个元素选上,剩下的 \(n-1\) 个元素任意选或不选,所以它恰好出现在 \[ 2^{n-1} \] 个子集中。 一共有 \(n\) 个元素,因此总出现次数就是 \[ n2^{n-1}. \] 这同样是一个非常漂亮的双计数恒等式。
示例: 对于 3 元集合 \(\{a,b,c\}\),全部子集中的“元素总出现次数”为 \[ 3\cdot 2^{2}=12. \] 也可以按公式写成 \[ 0\binom30+1\binom31+2\binom32+3\binom33 =0+3+6+3=12. \]
示例解释: 例如元素 \(a\) 出现在这些子集中: \[ \{a\},\{a,b\},\{a,c\},\{a,b,c\}, \] 一共 4 次;同理 \(b,c\) 也各出现 4 次,所以总出现次数为 \[ 4+4+4=12. \] 另一方面,按子集大小分层来看: 1 元子集共有 3 个,总共贡献 3; 2 元子集共有 3 个,每个贡献 2,总共贡献 6; 3 元子集共有 1 个,贡献 3; 加起来也是 12。 所以这条恒等式的本质就是: **一边按“子集”数元素,一边按“元素”数子集。**
55. 平均值双计数思想
通过总计数除以对象数,常可得到平均度数、平均块大小、平均出现次数等信息。
前置:双计数、平均数、基本不等式思想。
定理解释: 平均值双计数思想并不是某一条单独的公式,而是一类非常常见、非常实用的方法。 它的基本套路是: 先把某个“总量”用两种方式算出来,然后再除以对象总数,得到平均值。 一旦得到了平均值,就往往能推出存在性结论: 至少有一个对象不小于平均值,至少有一个对象不大于平均值; 如果所有对象都严格小于平均值,那总量就不够; 如果所有对象都严格大于平均值,那总量又会超出。 所以“平均值”经常是从“总计数”通向“存在性”的桥梁。 在组合与图论中,这个思路非常常见,比如平均度数、平均覆盖次数、平均块大小、平均交数等等,很多极值结论都是先从平均量入手。
示例: 若一个图有 \(n\) 个顶点、\(m\) 条边,则平均度数为 \[ \frac{2m}{n}. \]
示例解释: 因为根据握手定理,所有顶点度数之和等于 \[ 2m. \] 再除以顶点总数 \(n\),就得到平均度数 \[ \frac{2m}{n}. \] 这马上能推出很多结论。 例如,至少存在一个顶点的度数不小于 \(\frac{2m}{n}\);否则如果每个顶点度数都小于这个数,那么总度数就会小于 \(2m\),矛盾。 同样,也至少有一个顶点度数不大于 \(\frac{2m}{n}\)。 所以平均值双计数思想的常见作用,不只是“算平均数”,而是借平均数推出“某个特殊对象一定存在”。
56. 组合恒等式的计数证明法
许多代数恒等式都可以通过构造一个具体的计数模型来证明。
前置:一一对应、双计数、分类讨论。
定理解释: 组合恒等式的计数证明法,是组合数学里最有代表性的思想之一。 它的核心是:遇到一个看起来纯代数的恒等式时,不急着做代数变形,而是试着把它解释成“在数某一类对象的总个数”。 如果恒等式两边都能解释成同一个计数问题的两种数法,那么这个恒等式就自然成立。 这种证明方法的优点很大: 第一,它通常比机械代数变形更直观; 第二,它能告诉你“这个式子为什么会长这样”,而不只是“怎么算出来”; 第三,它往往还能启发推广,因为一旦你理解了背后的对象模型,就知道类似问题应当如何构造。 所以在组合数学里,很多恒等式最有价值的部分并不是式子本身,而是它背后的计数解释。
示例: 经典恒等式 \[ \sum_{k=0}^{r}\binom{m}{k}\binom{n}{r-k}=\binom{m+n}{r} \] 就可以理解成:从两堆元素里总共选出 \(r\) 个元素的方法数。
示例解释: 设第一堆有 \(m\) 个元素,第二堆有 \(n\) 个元素。 现在要从这两堆元素中总共选 \(r\) 个。 如果直接选,那么方法数显然是 \[ \binom{m+n}{r}. \] 但也可以分类来数: 假设从第一堆选了 \(k\) 个,那么就必须从第二堆选 \(r-k\) 个; 这样的选法有 \[ \binom{m}{k}\binom{n}{r-k} \] 种。 让 \(k\) 从 0 到 \(r\) 全部跑一遍,再把这些情况加起来,就得到左边。 因为左右两边都在数同一件事,所以它们必然相等。 这正是计数证明法最典型的样子: **一个恒等式之所以成立,不是因为“式子碰巧变得一样”,而是因为它们本来就在数同一个对象集。**

十一、集合族与偏序理论

这一部分开始明显进入竞赛组合的结构区,不再只是算数目,而是研究集合族的形状和限制。
57. 偏序集与链、反链
在偏序集中,链指两两可比的子集,反链指两两不可比的子集。
前置:集合包含关系、偏序概念。
定理解释:链代表“完全排得出大小关系”,反链则代表“彼此谁也不包含谁”。
示例:在幂集 \(\mathcal P([n])\) 中,\(\varnothing\subset\{1\}\subset\{1,2\}\) 是链;所有大小同为 2 的子集构成反链。
示例解释:同大小集合不可能真包含彼此,所以天然构成反链。
58. Sperner 定理 经典
\([n]\) 的子集族中,若任意两个集合互不包含,则其最大规模为
\[ \binom{n}{\lfloor n/2\rfloor}. \]
前置:反链、二项式系数。
定理解释:在布尔格里,最大的反链由“中间层”给出,也就是元素个数最接近 \(n/2\) 的那一层。
示例:当 \(n=4\) 时,最大反链大小是 \(\binom42=6\)。
示例解释:所有 2 元子集一共 6 个,任意两个都不互相包含,而且已经达到最大值。
59. LYM 不等式
若 \(\mathcal F\subseteq\mathcal P([n])\) 是反链,则
\[ \sum_{A\in\mathcal F}\frac1{\binom{n}{|A|}}\le 1. \]
前置:Sperner 定理、链分解思想、布尔格 \(\mathcal P([n])\) 的层结构。
定理解释: LYM 不等式是 Sperner 定理的一个加强版。 Sperner 定理只告诉我们:一个反链最多能有多少个集合;而 LYM 不等式更进一步,它不是只看“个数”,而是给每个集合赋了一个“权重” \[ \frac1{\binom{n}{|A|}}. \] 这些权重反映了集合所处层的位置:在布尔格 \(\mathcal P([n])\) 里,大小为 \(k\) 的集合都位于第 \(k\) 层,而这一层一共有 \(\binom{n}{k}\) 个元素。 所以一个集合 \(A\) 对应的权重,其实可以理解为“它在自己所在层里所占的比例”。 LYM 不等式说明:如果 \(\mathcal F\) 是一个反链,那么它从各层“拿走”的这些比例,加起来不能超过 1。 换句话说,反链虽然可以分散在不同层,但它在整个布尔格里的“总占比”有一个统一上界。 这正是为什么说它比 Sperner 定理更强:Sperner 只是它的一个直接推论。
示例: 若 \(\mathcal F\) 全由 2 元子集组成,则 \[ \sum_{A\in\mathcal F}\frac1{\binom{n}{|A|}} = \sum_{A\in\mathcal F}\frac1{\binom n2} = \frac{|\mathcal F|}{\binom n2}. \] 由 LYM 不等式可得 \[ \frac{|\mathcal F|}{\binom n2}\le 1, \qquad\text{从而}\qquad |\mathcal F|\le \binom n2. \]
示例解释: 这说明:如果反链里的所有集合都集中在同一层,比如都恰好是 2 元集,那么 LYM 不等式就直接退化成这一层大小的上界。 而当反链分布在不同层时,LYM 不等式就比单纯“看某一层最大”更有力量,因为它会把各层贡献统一加权控制起来。 例如,若一个反链既取了一些 1 元集,又取了一些 2 元集,那么它们不能随便同时取很多个,因为 \[ \frac{\#\{\text{1 元集}\}}{\binom n1}+\frac{\#\{\text{2 元集}\}}{\binom n2}\le 1. \] 这就是 LYM 不等式真正厉害的地方:它给出的不是单层极值,而是跨层约束。
60. Dilworth 定理 重要
有限偏序集中,最大反链大小等于最少链覆盖数。
前置:偏序、链、反链、覆盖的概念。
定理解释: Dilworth 定理是偏序理论里最核心的极值定理之一。 它研究的是一个偏序集里两种完全相反的结构: 一种是,也就是元素之间两两可比; 另一种是反链,也就是元素之间两两不可比。 直观上,链体现的是“纵向层次”,反链体现的是“横向宽度”。 Dilworth 定理说:一个有限偏序集里,最大的“横向宽度”(最大反链大小),恰好等于把整个偏序集拆成若干条链所需的最少条数。 也就是说,一个偏序到底“有多宽”,可以完全用“最少需要多少条纵向链来覆盖它”来刻画。 这是一个非常漂亮的 min-max 结论。 它的意义在于:反链看起来是在研究“不能比较的一群元素”,链覆盖看起来是在研究“怎样分层整理整个集合”,这两件事原本毫不相干,但 Dilworth 定理告诉我们,它们其实是同一个量的两种表达。
示例: 设 \[ P=\{2,3,4,6,12\}, \] 并按整除关系定义偏序,即 \(a\le b\) 表示 \(a\mid b\)。 那么: \[ 2<4<12,\qquad 3<6<12 \] 都是链;而集合 \[ \{3,4\} \] 是一个反链,因为 \(3\nmid 4\),\(4\nmid 3\)。 在这个偏序里,最大反链大小为 2,因此根据 Dilworth 定理,整个偏序集最少可以用 2 条链覆盖。
示例解释: 这里的意思是:虽然这个偏序里有不少元素,但它最“宽”的地方只有 2,也就是最多只能找到 2 个两两不可比的元素。 那么整个偏序集就一定能拆成 2 条链来覆盖,而且不可能只用 1 条链。 例如一种覆盖方式可以是: \[ 2<4<12,\qquad 3<6. \] 这两条链已经覆盖了全部元素。 而为什么不能只用 1 条链?因为偏序中存在反链 \(\{3,4\}\),这两个元素彼此不可比,不可能同时放进同一条链里。 所以最大反链大小给出了链覆盖数的下界,而 Dilworth 定理说,这个下界正好可以达到。 这也是它在整除偏序、区间包含、序列分解等题里非常常用的原因: 只要你能找出一个大的反链,就知道至少要多少条链;而 Dilworth 定理保证这个数其实也够了。
61. Mirsky 定理
有限偏序集中,最大链长度等于最少反链覆盖数。
前置:偏序、链、反链、Dilworth 思想。
定理解释: Mirsky 定理可以看作 Dilworth 定理的对偶版本。 Dilworth 定理研究的是:最大反链大小 = 最少链覆盖数; Mirsky 定理则研究:最大链长度 = 最少反链覆盖数。 也就是说,如果说 Dilworth 把“宽度”与“链分解”联系起来,那么 Mirsky 就是把“高度”与“反链分层”联系起来。 它告诉我们:一个偏序集里最长能排出多长的一条链,就恰好需要多少层反链,才能把整个集合分层覆盖掉。 这条定理的直观意义很强: 如果一个偏序集的最长链长度是 \(h\),那么你至少要用 \(h\) 个反链来覆盖全部元素,因为同一个反链里任何两个元素都不能比较,所以一条长度为 \(h\) 的链中的 \(h\) 个元素必须分散到不同的反链中。 Mirsky 定理说,这个显然的下界其实总是可以达到。 因此,“偏序的高度”正好等于“最少反链层数”。
示例: 设偏序集为 \[ P=\mathcal P([3]) \] ,偏序关系是集合包含。 那么有一条最长链 \[ \varnothing \subset \{1\}\subset \{1,2\}\subset \{1,2,3\}, \] 长度为 4。 因此根据 Mirsky 定理,整个偏序集最少可以用 4 个反链覆盖。
示例解释: 在幂集偏序里,一个最自然的反链分层方式就是按集合大小来分层: \[ \{\varnothing\},\qquad \{\{1\},\{2\},\{3\}\},\qquad \{\{1,2\},\{1,3\},\{2,3\}\},\qquad \{\{1,2,3\}\}. \] 这 4 层中的每一层都是反链,因为同一层里的集合大小相同,不可能互相包含。 于是,整个偏序集确实能用 4 个反链覆盖。 同时也不可能少于 4 个,因为那条最长链 \[ \varnothing \subset \{1\}\subset \{1,2\}\subset \{1,2,3\} \] 中的 4 个集合彼此两两可比,它们不能落在同一个反链里,所以至少需要 4 层。 这就很好地体现了 Mirsky 定理的本质: “最长链有多高,反链分层就至少要有多少层;而且正好能做到这么多层。”
62. Erdős–Ko–Rado 定理 经典
当 \(n\ge 2k\) 时,\([n]\) 的 \(k\) 元子集族中,若任意两集合相交,则其最大规模为
\[ \binom{n-1}{k-1}. \]
前置:集合族、交叉结构。
定理解释:“两两相交”的 \(k\) 元集合族,做到最大时,本质上应当都含有某个固定元素。
示例:所有包含元素 1 的 \(k\) 元子集共有 \(\binom{n-1}{k-1}\) 个,而且任意两者必相交。
示例解释:因为它们都含 1,所以天然两两相交。这族集合就是 EKR 定理里的极值构造。

十二、Ramsey 理论与极值组合

Ramsey 思想说的是:规模足够大时,杂乱中也会强制出现某种有序结构。
63. Ramsey 数定义
最小整数 \(R(s,t)\) 满足:任意对完全图 \(K_{R(s,t)}\) 的边进行红蓝二染色时,必存在一个红色 \(K_s\) 或一个蓝色 \(K_t\)。
前置:图、完全图、边染色、单色完全子图。
定理解释: Ramsey 数 \(R(s,t)\) 用来衡量这样一个临界规模: 当完全图的顶点数达到这个规模以后,不管你怎样把每条边染成红色或蓝色,都已经无法避免出现某种指定大小的单色完全子图。 这里的“红色 \(K_s\)”意思是:存在 \(s\) 个顶点,它们两两之间的边全是红色;“蓝色 \(K_t\)”同理。 所以 Ramsey 数的本质不是在研究“能不能构造出一个好例子”,而是在研究“图大到什么程度以后,某种有序结构已经被强制出现了”。 它代表的是一种非常典型的组合思想:**规模一旦足够大,完全混乱其实不可能维持下去,规则结构迟早会冒出来。** 因此,Ramsey 数常被理解为“无序不可持续到多大”的阈值。
示例: 著名结论是 \[ R(3,3)=6. \] 这表示:任意对完全图 \(K_6\) 的边做红蓝二染色,必定能找到一个红色三角形或一个蓝色三角形。
示例解释: 这条结论常被翻译成一个很形象的“六人聚会问题”: 在 6 个人中,把任意两人之间的关系标成“认识”或“不认识”两种颜色,那么一定能找到 3 个人,使得他们两两都认识,或者两两都不认识。 注意这里说的是“必定存在”,也就是不管关系如何分配,都逃不掉这个结果。 同时 \(R(3,3)=6\) 还包含另一层意思:5 个点时还可以构造一种染色,使红三角和蓝三角都不存在;但到了 6 个点,这种回避就彻底不可能了。 所以 6 正是这个问题的临界点。
64. Ramsey 定理
任意大的完全图在有限边染色下,总存在任意给定规模的单色完全子图。
前置:有限染色、完全图、Ramsey 数定义。
定理解释: Ramsey 定理是 Ramsey 数定义背后的总体存在性结论。 它告诉我们:对于任意给定的正整数 \(m\) 和任意有限种颜色,只要完全图足够大,那么无论怎么给边染色,都一定会出现一个边全同色的 \(K_m\)。 也就是说,**大规模离散结构中,某种规则模式是不可避免的。** 这条定理是 Ramsey 理论的核心起点。 它的意义在于:我们不再只是看某个具体数字 \(R(s,t)\),而是从整体上知道,这类“强制单色结构”的阈值总是存在的。 换句话说,不存在“无限地逃避单色完全子图”的染色方式;你可以在小图里躲开一阵子,但只要图继续变大,终究还是要被某种单色结构逼出来。
示例: 在二染色情况下,对任意给定的 \(m\),都存在一个整数 \(N\),使得任意对 \(K_N\) 的边进行红蓝染色,必含一个单色 \(K_m\)。
示例解释: 例如当 \(m=3\) 时,这个 \(N\) 就是 \(R(3,3)=6\)。 当 \(m\) 再变大时,所需的 \(N\) 也会迅速变大,虽然具体数值往往很难求,但“这样的 \(N\) 一定存在”是 Ramsey 定理保证的。 所以 Ramsey 定理强调的不是“数值好不好算”,而是“有序结构在大规模中一定存在”。 这也是它被称为“杂乱中必出秩序”的经典来源。
65. Turán 定理 极值图论核心
在所有不含 \(K_{r+1}\) 的 \(n\) 阶图中,边数最多的图由 Turán 图 \(T_{n,r}\) 达到。
\[ e(G)\le e(T_{n,r}). \]
前置:图、完全子图、极值思想、完全 \(r\) 部图。
定理解释: Turán 定理是极值图论中最核心的起点之一。 它研究的是这样一个问题:如果我们禁止图中出现一个太大的完全子图 \(K_{r+1}\),那么这张图最多还能有多少条边? 直观上讲,如果边太多,图就会越来越“团块化”,最终容易形成大的完全子图;所以想在“不出现 \(K_{r+1}\)”的前提下尽量多放边,就必须把顶点分成若干部分,使同一部分内部不连边,不同部分之间尽量全连。 Turán 定理说明,这种最优结构恰好就是尽量均匀分成 \(r\) 份的完全 \(r\) 部图,也就是 Turán 图。 所以它不只是给出一个边数上界,更告诉我们:**极值构造长什么样。**
示例: 当 \(r=2\) 时,Turán 定理说明:所有不含三角形 \(K_3\) 的 \(n\) 阶图中,边数最多的是把顶点尽量平均分成两部分的完全二部图。
示例解释: 这是 Mantel 定理的内容,可以看作 Turán 定理最基础的特例。 为什么完全二部图不会出现三角形?因为三角形需要三个点两两相连,而二部图中同一部分内没有边,所以不可能形成三角形。 又为什么要“尽量平均分”?因为跨部边数等于两部分大小的乘积,在总点数固定时,这个乘积在两部分尽量接近时最大。 所以 Turán 定理传达出的思想非常清楚: **在禁止大团的条件下,最稠密的图往往是“尽量均匀分部”的完全多部图。**
66. Schur 定理
任意有限着色的正整数集里,总存在同色整数 \(x,y,z\),使得
\[ x+y=z. \]
前置:Ramsey 思想、整数加法结构、有限着色。
定理解释: Schur 定理说明:即使我们把正整数染成有限多种颜色,也无法永远逃避一种最基本的加法关系——同色解 \[ x+y=z. \] 也就是说,有限染色可以制造表面上的混乱,但在整数的加法结构里,这种混乱终究不能彻底破坏最简单的线性关系。 这是 Ramsey 思想从“图的边染色”走向“整数加法结构”的一个典型例子。 它告诉我们:不仅图里会强制出现单色结构,整数集合在有限着色下也一样会被迫出现同色的代数关系。
示例: 如果把足够大的正整数集合染成红、蓝两色,那么总能找到三个同色整数 \(x,y,z\),满足 \[ x+y=z. \]
示例解释: 这里的关键点不是“有时会找到”,而是“无论怎么染,最终都逃不开”。 比如你可能想把整数染色,试图避免同色加法三元组,但 Schur 定理告诉你:这种避免只能在很小范围内暂时成立,一旦范围足够大,就一定失败。 所以它体现的是:**有限染色无法彻底打乱整数中的加法规律。**
67. van der Waerden 定理
任意有限着色的正整数区间中,总存在任意长度的单色等差数列。
前置:Ramsey 理论、等差数列、有限着色。
定理解释: van der Waerden 定理是 Ramsey 理论在整数加法结构中的另一条代表性结论。 它说的是:只要把正整数按有限多种颜色染色,那么不管你怎样染,都不可能永远阻止长等差数列的出现。 对任意指定的长度 \(k\),总存在一个足够大的整数 \(N\),使得区间 \[ \{1,2,\dots,N\} \] 的任意有限着色中,都一定包含一个长度为 \(k\) 的单色等差数列。 这说明“等差数列”这种非常规则的结构,在大规模整数系统里具有强制性。 也就是说,颜色虽然把集合分裂成了若干块,但仍然压不住这种线性秩序。
示例: 若把 \(\{1,2,\dots,N\}\) 染成两色,只要 \(N\) 足够大,就一定存在一个很长的单色等差数列。
示例解释: 例如,若我们关心长度为 3 的单色等差数列,那么从某个规模开始,无论怎样用两种颜色给区间染色,都一定会出现同色的 \[ a,\ a+d,\ a+2d. \] 更一般地,长度 \(k\) 越大,需要的区间长度 \(N\) 也越大,但 van der Waerden 定理保证这种阈值总是存在。 所以这一定理的重点仍然不是“具体最小 \(N\) 是多少”,而是“单色等差数列终究躲不开”。 它和 Schur 定理一起,都是整数版 Ramsey 理论的经典代表。
68. Hales–Jewett 定理 偏难
在高维字母立方体的任意有限着色中,总存在一条单色组合线。
前置:Ramsey 理论、高维离散结构、有限字母表与组合线的概念。
定理解释: Hales–Jewett 定理可以看作 Ramsey 理论的一个非常高维、非常强大的总括性结论。 它研究的对象不再是图边,也不再只是整数,而是由有限字母组成的高维“词空间”。 例如,在字母表 \(\{1,2,\dots,m\}\) 上考虑长度为 \(n\) 的所有字符串,这些字符串构成一个高维离散立方体。 所谓“组合线”,可以粗略理解为:固定大部分位置,只让某些位置同时变化,从而形成的一条规则族。 Hales–Jewett 定理说:只要维数足够大,那么无论怎样做有限着色,都一定会出现一整条这样的单色组合线。 这说明在高维离散空间里,规则结构的不可避免性比低维更强。 许多经典的染色定理,如 van der Waerden 定理,都可以看成它的某种投影或推论。
示例: 可以把 Hales–Jewett 定理理解成 van der Waerden 定理在更高维字母空间中的推广: 当维度足够高时,有限着色一定会强制产生一条单色的规则变化族。
示例解释: 它的表述虽然比“单色等差数列”抽象得多,但核心思想完全一致: **规模一大,有限染色就无法阻止规则模式的出现。** 只不过这里的“规则模式”不再是数轴上的等差数列,而是高维字母立方体中的组合线。 也正因为它足够一般、足够强,所以在 Ramsey 理论中地位非常高,经常被看作一个统一很多单色结构定理的上层框架。

十三、图论基础计数结论

这里是组合与图论交汇最频繁的一层:很多图论结论本身就是非常漂亮的计数恒等式。
69. 握手定理
\[ \sum_{v\in V}\deg(v)=2|E|. \]
前置:图、边、顶点度数、双计数思想。
定理解释: 握手定理是图论里最基础、也最常用的一条公式之一。 它的意思是:在一个有限无向图中,把所有顶点的度数加起来,结果一定等于边数的两倍。 原因非常直接:每一条边都有两个端点,所以如果我们按“边”来看,每条边会贡献 2 个端点; 而如果我们按“点”来看,每个顶点贡献的正是它所连接的边数,也就是它的度数。 这两种数法其实都在数同一件事——图中所有“边端点关联”的总数,因此结果必然相等。 这条定理本质上是一个非常标准的双计数公式。 它虽然简单,但作用非常大:很多关于图的奇偶性、平均度数、边数估计、存在性结论,都是从它出发的。
示例: 若一个图有 7 条边,则所有顶点度数之和必为 \[ 2\times 7=14. \]
示例解释: 这里不需要知道图具体长什么样。 不管这 7 条边如何连接,每条边总是恰好给总度数贡献 2,所以总度数和一定是 14。 比如一个图的顶点度数可能是 \[ 4,3,3,2,1,1, \] 它们的和就是 14;换一张图,度数分布可能完全不同,但和仍然必须是 14。 所以握手定理提供的是一个“整体守恒关系”,它不依赖局部形状,只依赖边数总量。
70. 奇度点个数为偶数
任意有限图中,奇数度顶点的个数是偶数。
前置:握手定理、奇偶性、整数加法。
定理解释: 这条结论是握手定理最经典、也最常见的直接推论。 因为握手定理告诉我们: \[ \sum_{v\in V}\deg(v)=2|E|, \] 所以所有顶点度数的总和一定是偶数。 现在来观察一堆整数的和什么时候会是偶数: 偶数项加起来仍是偶数; 而奇数项的和,只有当奇数项的个数是偶数个时,结果才会是偶数。 因此,在图的所有顶点度数中,奇数度顶点的个数不可能是奇数,只能是偶数。 这条结论非常有用,因为它常常能一眼排除某些图的可能性,或者在构造图时给出必要条件。
示例: 一个图不可能恰好只有 3 个奇度点。
示例解释: 如果恰有 3 个奇度点,那么所有顶点度数和就是“3 个奇数加上一堆偶数”。 但 3 个奇数的和是奇数,奇数再加上若干偶数,结果仍然是奇数。 这就和握手定理给出的“总度数和一定是偶数”矛盾。 所以奇度点个数只能是 \[ 0,2,4,6,\dots \] 这样的偶数。 例如一个路径图有 2 个奇度点;一个 Euler 回路图有 0 个奇度点;但绝不可能出现 1 个或 3 个奇度点这样的情况。
71. 树的边数公式
任意 \(n\) 个顶点的树恰有
\[ n-1 \]
条边。
前置:树、连通图、无环图、归纳思想。
定理解释: 树可以理解成“最简单的连通图”,也可以理解成“刚刚好连通”的图。 这里“刚刚好”的意思是: 如果边再少一条,图就会断开; 如果边再多一条,就会出现环。 树的边数公式 \[ |E|=n-1 \] 正好体现了这种临界性。 它说明:一个树的边数既不会太少,也不会太多,而是恰好卡在连通与无环这两个条件同时成立的边界上。 这条公式既可以用归纳法证明,也可以从“每次往树里加一个新顶点,只需连一条新边”这个过程来理解。 它是树论里最根本的数量关系之一。
示例: 10 个顶点的树必有 \[ 10-1=9 \] 条边。
示例解释: 例如,从一个顶点开始,它本身就是一棵树,此时有 1 个点、0 条边。 之后每加入一个新顶点,为了保持连通且不产生环,只能用 1 条边把它接到原来的树上。 因此每多 1 个点,就多 1 条边。 从 1 个点扩展到 10 个点,一共增加了 9 次,所以边数就是 9。 这条公式在树的归纳证明、图算法、生成树问题里都会反复出现,是树结构最重要的计数特征之一。
72. Cayley 公式 经典
\(n\) 个标号顶点上的树的个数为
\[ n^{n-2}. \]
前置:树、标号图、Prufer 编码或双射思想。
定理解释: Cayley 公式是图论计数中最著名的公式之一。 它回答了一个非常自然的问题:如果顶点已经标号为 \[ 1,2,\dots,n, \] 那么一共能构成多少棵不同的树? 答案居然是一个极其简洁的闭式: \[ n^{n-2}. \] 这个结果之所以惊艳,是因为“树的形状”看起来非常复杂,各种连接方式很多,但最后总数却压缩成了这样简单的表达式。 Cayley 公式最经典的证明方法是 Prufer 编码: 每一棵标号树都可以和一个长度为 \(n-2\) 的序列一一对应,而这个序列的每一项都可以从 \(1,2,\dots,n\) 中任取。 因此总数正好就是 \[ n^{n-2}. \] 这条公式说明:有时候复杂图结构的计数问题,背后会隐藏着非常整齐的编码机制。
示例: 4 个标号点上的树共有 \[ 4^{4-2}=4^2=16 \] 棵。
示例解释: 这里说的是“标号树”,也就是说顶点 \(1,2,3,4\) 的位置不能随便交换; 只要连接关系不同,就算不同的树。 例如,一棵星形树和一棵链形树当然不同;即使都是链形,如果顶点标号分配方式不同,也算不同的标号树。 Prufer 编码告诉我们:每棵这样的树都唯一对应一个长度为 2 的序列,而每个位置有 4 种可能,所以总数是 \[ 4\cdot4=16. \] 这也说明了为什么公式里会出现 \(n-2\) 次方。
73. Kirchhoff 矩阵树定理 重要
图的生成树个数等于其 Laplace 矩阵任一代数余子式。
前置:矩阵、行列式、图、生成树、Laplace 矩阵。
定理解释: 矩阵树定理是组合图论和线性代数之间最经典的桥梁之一。 它说的是:如果我们把图的信息写进一个矩阵——通常是 Laplace 矩阵(也叫 Kirchhoff 矩阵)——那么这个矩阵删去任意一行一列后得到的行列式,恰好就是图的生成树个数。 也就是说,一个看起来纯粹是“数树有多少棵”的离散计数问题,居然可以转化为“算一个行列式”的代数问题。 这条定理非常强大,因为很多图的生成树数用直接数法几乎不可能做,而一旦矩阵写出来,问题就变成了标准的线性代数计算。 它体现了一种很重要的组合思想: **复杂的离散结构,有时可以通过代数工具被统一编码。**
示例: 求完全图 \(K_n\)、完全二部图 \(K_{m,n}\)、循环图等的生成树个数时,常直接使用矩阵树定理。
示例解释: 例如完全图 \(K_n\) 的每个顶点度数都是 \(n-1\),因此它的 Laplace 矩阵形式很整齐。 对这个矩阵删去一行一列后算行列式,就可以推出生成树数是 \[ n^{n-2}, \] 这也正好回到了 Cayley 公式。 所以矩阵树定理不仅能处理一般图,还能作为 Cayley 公式的一种统一证明框架。 它在图论中地位很高,因为它把“结构计数”与“矩阵行列式”联系得非常精确。
74. Euler 回路判定
连通图有 Euler 回路,当且仅当每个顶点度数都为偶数。
前置:图、连通性、度数、闭路、奇偶性。
定理解释: Euler 回路是指一条经过图中每条边恰好一次、并且最后回到出发点的闭路。 这条判定定理说明:一个连通图能否存在 Euler 回路,完全由各顶点度数的奇偶性决定。 为什么“偶数度”是关键? 因为如果你沿着一条 Euler 回路走,在中间经过某个顶点时,每次进入这个点,都必须还能沿另一条尚未走过的边离开。 这样一来,与这个点有关的边就必须能一对一对地配成“进—出”两条,所以总数必须是偶数。 对起点和终点,由于 Euler 回路要求最后还要回到起点,因此起点和终点其实是同一个点,也同样要满足偶数配对。 因此,连通图存在 Euler 回路的必要条件是每个点度数都为偶数; 而这条定理更强,它还告诉我们:这个条件同时也是充分的。
示例: 若某个连通图所有顶点度数都是 2,则它必有 Euler 回路。
示例解释: 因为每个点的度数都是偶数,而且图又连通,所以满足 Euler 回路判定条件。 更直观地说,在每个顶点处,你总可以“从一条边进,再从另一条边出”,不会在中途卡住。 例如一个简单的环图 \(C_n\) 中,每个顶点度数都是 2,所以沿着环绕一圈,正好经过每条边一次并回到起点,这就是一条 Euler 回路。 反过来,如果某个连通图中有奇度点,那么在走边的过程中,某些点就会出现“进得去却配不出”的情况,从而无法形成经过所有边一次的闭路。

十四、匹配、覆盖与网络流型结论

这一部分是组合、图论、算法三者交汇处,尤其适合做“存在性判定”。
75. Hall 婚配定理 核心
二分图 \(G=(X,Y)\) 存在覆盖 \(X\) 的匹配,当且仅当对任意 \(S\subseteq X\),有
\[ |N(S)|\ge |S|. \]
前置:二分图、邻集、匹配。
定理解释:想让 \(X\) 中每个人都分到一个不同对象,必要条件是任何一群人能接触到的候选对象数不能比他们自己少;Hall 定理说明这也是充分条件。
示例:若 3 个男生共同认识的女生只有 2 个,就不可能给他们安排互不冲突的舞伴。
示例解释:这就是 Hall 条件失败的最直观情形:资源不够覆盖这群人。
76. König 定理
二分图中,最大匹配数等于最小点覆盖数。
前置:二分图、匹配、点覆盖。
定理解释:这是一条非常漂亮的 min-max 定理:一边是最多能挑多少条不相交边,一边是最少用多少个点能碰到所有边。
示例:若一个二分图最大匹配大小是 5,则最小点覆盖也一定大小为 5。
示例解释:这条定理只对二分图成立;一般图中情况会复杂得多。
77. Menger 定理(知识型)
两个点集之间的最小割大小等于最大点不交路径数(或边不交路径数)。
前置:路径、割、图的连通性。
定理解释:它把“最多能找到多少条彼此独立的路”和“至少删多少东西才能断开”联系起来。
示例:若两点间存在 3 条内部点互不相交的路径,则至少删掉 3 个内部点才能把它们分开。
示例解释:这体现了“路多则难断,难断则路多”的精确对应。
78. 最大流最小割定理(知识型)
网络中的最大流量等于最小割容量。
前置:网络流、容量、割集。
定理解释:流量再大也冲不过某个最窄瓶颈;而这个瓶颈恰好决定了最大可能流量。
示例:管道网络、任务分配、二分图匹配等问题,都可转化成最大流模型。
示例解释:很多看似纯组合的存在性问题,一旦建成流网络,就能用这条定理解决。

十五、染色、多项式与图计数

这里的重点是:颜色不是随便涂,而是有严格限制;而这些限制常能被多项式统一记录。
79. 图染色数定义
图的染色数 \(\chi(G)\) 是把顶点染色使相邻点异色所需的最少颜色数。
前置:图、相邻、顶点染色。
定理解释:染色数衡量一个图“冲突结构有多强”。越难染,说明图中相互制约越多。
示例:完全图 \(K_n\) 的染色数是 \(n\)。
示例解释:因为任意两个点都相邻,所以每个点都必须用不同颜色。
80. 染色多项式
图 \(G\) 的染色多项式 \(P_G(k)\) 表示用 \(k\) 种颜色对 \(G\) 做合法顶点染色的方法数。
前置:图染色、计数。
定理解释:对于固定图而言,合法染色数居然是一个关于 \(k\) 的多项式,这是一个很漂亮的结构结论。
示例:路径图 \(P_n\) 的染色多项式是 \(k(k-1)^{n-1}\)。
示例解释:第一个点随便染 \(k\) 种,后面每个点只需避开前一个点的颜色,所以各有 \(k-1\) 种。
81. 删除—收缩递推
对任意边 \(e\),有
\[ P_G(k)=P_{G-e}(k)-P_{G/e}(k). \]
前置:染色多项式、图的删除和收缩。
定理解释:先数删掉 \(e\) 后的染色,再减去“两个端点被染成同色”的那些情形,而这些正好对应收缩后的染色。
示例:很多小图的染色多项式都靠这条递推逐步算出。
示例解释:它相当于把复杂图拆成两个更简单的图来处理。

十六、对称群作用与计数

当对象之间存在“旋转视为同一种”“翻折视为同一种”时,普通计数就会重复,必须引入群作用。
82. 轨道—稳定子公式
群 \(G\) 作用在集合 \(X\) 上时,对任意 \(x\in X\),有
\[ |\operatorname{Orb}(x)|\cdot |\operatorname{Stab}(x)|=|G|. \]
前置:群作用、轨道、稳定子。
定理解释:一个对象在群作用下能变出多少种不同样子,和有多少个群元素把它固定住,是互补关系。
示例:正方形旋转作用在顶点染色上时,可用这条公式分析等价类大小。
示例解释:越“对称”的对象,被固定住的群元素越多,因此它的轨道通常越小。
83. Burnside 引理 经典
不同等价类(轨道)数等于各群元素固定点数的平均值:
\[ \#(\text{轨道})=\frac1{|G|}\sum_{g\in G}|\operatorname{Fix}(g)|. \]
前置:群作用、固定点。
定理解释:想数“本质不同”的对象,不必直接分轨道,只要把每种对称操作下不变的对象数平均一下即可。
示例:数圆珠项链的不同染色、数旋转同构的多边形染色,都常用 Burnside 引理。
示例解释:因为这类问题最麻烦的就是“旋转后算不算同一种”,而 Burnside 正是处理这种等价关系的工具。
84. Pólya 计数定理 重要
在群作用下,可借助循环指标多项式统一求各种带色对象的等价类计数。
前置:Burnside 引理、置换循环分解。
定理解释:Pólya 定理是 Burnside 的系统化加强版。它不只数一种颜色数,而是能统一处理多色分布问题。
示例:数正六边形顶点的两色染色,若旋转视同一种,可用 Pólya 定理快速得到答案。
示例解释:相比逐个算固定点,Pólya 用循环指标一次性编码了所有对称操作的贡献。

十七、设计、编码与有限几何相关结论

这一部分更偏竞赛拓展与知识结构,很多条目不是日常高频,但很适合做专题提升。
85. Steiner 系统(知识型)
Steiner 系统 \(S(t,k,n)\) 指一个 \(n\) 元点集上的 \(k\) 元块族,使每个 \(t\) 元子集恰好属于一个块。
前置:集合族、设计理论。
定理解释:这是非常整齐的组合设计:每个小子集被覆盖得刚刚好,不多不少。
示例:著名的 Fano 平面可看作一个小型设计结构。
示例解释:这类对象兼具强对称性与精确覆盖性,所以在组合、几何、编码里都很重要。
86. BIBD 参数关系
平衡不完全区组设计中,参数满足
\[ vr=bk,\qquad \lambda(v-1)=r(k-1). \]
前置:设计理论、双计数。
定理解释:这两条关系分别来自于:数“点块关联对”以及数“固定一点和另一点共同出现”的情况。
示例:判断某组参数能否构成 BIBD 时,通常先检验这两条必要条件。
示例解释:若连参数关系都不满足,那设计结构就根本不可能存在。
87. 纠错码的 Hamming 界(知识型)
它给出纠错码长度、码字数、纠错能力之间的重要上界。
前置:编码理论、球打包思想。
定理解释:每个码字周围的“纠错球”不能重叠,否则接收到一个词时就无法唯一还原。
示例:研究二进制码能纠正多少位错误时,常先看 Hamming 界。
示例解释:这本质上也是抽屉与极值思想:空间有限,球装太多就会碰撞。

十八、竞赛组合小众定理清单

这一节更像“工具箱扩展页”,适合专题整理,不一定要求一开始就全都细学证明。
88. Kruskal–Katona 定理 偏难
它刻画了给定大小的集合族,其下影(shadow)的最小可能规模。
前置:集合族、\(k\) 元子集、字典序 / 余字典序、极值组合、下影(shadow)概念。
定理解释: Kruskal–Katona 定理是极值集合论中的一条核心定理。 它研究的问题不是“某个集合族有多少个集合”,而是更细地研究: 如果一个 \(k\) 元集合族已经有这么大了,那么把每个集合删掉一个元素以后,能产生多少个 \((k-1)\) 元集合?最少能少到什么程度? 这里产生出来的所有 \((k-1)\) 元集合,统称这个集合族的“下影”或“影子”。 这条定理的厉害之处在于:它告诉我们,影子的最小值不是随便乱猜,而是由一种非常整齐、非常规整的“初段集合族”达到的。 也就是说,在集合族大小已经固定的前提下,若想让边界尽量小,那么集合族本身必须长得很“紧”、很“靠前”、很“压缩”。 这是一种非常典型的高阶组合思想: 不是单纯比较数量,而是研究“结构长什么样时最省边界”。 所以它和前面那些基础计数定理不一样——前面更多是在数对象有多少个,而这条定理开始真正研究“极值结构的形状”。
示例: 设 \(\mathcal F\) 是一个由若干个 3 元子集组成的集合族。 对于每个 \(A\in\mathcal F\),删去其中任意一个元素,就会得到若干个 2 元子集。 所有这样得到的 2 元子集构成 \(\partial \mathcal F\),即 \(\mathcal F\) 的下影。 Kruskal–Katona 定理研究的就是:当 \(|\mathcal F|\) 固定时,\(|\partial \mathcal F|\) 最小可以是多少。
示例解释: 例如,如果 \(\mathcal F\) 由一些彼此“很集中”的 3 元集组成,那么它们删掉一个元素后得到的 2 元集可能重复很多,于是下影就会比较小; 如果 \(\mathcal F\) 很分散,那么删掉一个元素以后通常会产生很多不同的 2 元集,于是下影就会更大。 Kruskal–Katona 定理告诉我们:这种“最省影子”的集合族不是随便来的,而是某种压缩到最前面的标准形。 所以这条定理常被看作“集合族边界极小化”的基础工具。
89. Lovász 局部引理 重要
在若干坏事件概率都不太大,且依赖关系不太强时,可保证这些坏事件可以同时都不发生。
前置:概率方法、事件依赖、独立与非独立、乘法估计、存在性证明思想。
定理解释: Lovász 局部引理(通常简称 LLL)是概率方法中最著名的高阶工具之一。 它解决的是这样一种局面: 你有很多“坏事件”,每个坏事件单独看发生概率都不大;但是这些坏事件之间又不是完全独立的,所以不能直接把“都不发生”的概率简单相乘。 这时,局部引理告诉你: 只要每个坏事件足够稀少,而且每个坏事件只和不太多的其他坏事件发生依赖,那么“所有坏事件都不发生”的情况仍然是可能的。 也就是说,一个满足全部限制的好对象一定存在。 这是一种非常典型的“非构造存在性证明”: 它并不直接把对象造出来,而是通过概率和依赖关系估计,证明“坏情况不可能把所有可能性全部封死”。 对孩子来说,可以把它先理解成一句很直观的话: 如果每个局部错误都不太容易出现,而且这些错误不会大规模互相牵连,那么全局上就有希望一个错误都不出。
示例: 在图染色问题中,有时把顶点随机染色,然后把“某种局部冲突出现”看成坏事件。 如果每一种冲突发生概率都很小,而且每个冲突只与周围有限多个冲突有关,那么就可以尝试用 LLL 证明:存在一种染色使所有冲突都不发生。
示例解释: 例如,某个坏事件可能是“某一条边两端颜色相同”,或者“某一小块结构被染成了不允许的样子”。 这些坏事件通常只依赖于附近少数几个点或边,因此依赖关系是“局部的”,不会牵扯到全图。 如果再能证明每个坏事件本身发生概率足够小,那么 LLL 就会告诉我们: 虽然随机染色时局部冲突可能很多,但总存在一种全局配置,把所有局部冲突同时避开。 这就是局部引理最震撼的地方:它把“局部坏事件很多”与“全局好对象仍存在”联系了起来。
90. Möbius 反演在偏序中的形式
在偏序集上,若函数满足某种累加关系,则可借 Möbius 函数做反演。
前置:偏序、包含关系、约数偏序、反演思想、容斥原理的抽象理解。
定理解释: Möbius 反演在偏序中的形式,是把数论里熟悉的 Möbius 反演提升到一般偏序集上的统一框架。 它研究的是这样一类问题: 你先定义了一个函数 \(g\),然后另一个函数 \(f\) 是在“所有比它小的元素”上对 \(g\) 求和得到的。 也就是说, \[ f(x)=\sum_{y\le x} g(y). \] 那么问题来了:如果现在只知道 \(f\),还能不能把原来的 \(g\) 反推回来? Möbius 反演告诉我们:可以。 只不过反推时,不是简单减法,而是要乘上偏序集里对应的 Möbius 函数。 这条思想非常深,因为它把很多看起来不相干的公式统一了起来: 容斥原理、约数求和、布尔格上的符号交替、约数格中的 Möbius 反演,其实都可以看成是这同一个框架的不同特例。 所以这条定理真正重要的地方,不只是“能反演”,而是它让我们看见: 很多“先累加再恢复原值”的过程,本质上都是同一种数学现象。
示例: 在布尔格 \(\mathcal P([n])\) 中,若 \[ f(A)=\sum_{B\subseteq A} g(B), \] 那么就可以通过布尔格上的 Möbius 反演,把 \(g(A)\) 用 \(f(B)\) 的交错和表达出来。
示例解释: 这实际上就是容斥原理背后的抽象版本。 因为在布尔格里,Möbius 函数就是一种按层数交替符号的系数,所以“先对子集求和,再用交错和反推回来”这件事,就和容斥完全同源。 同样,在正整数按整除关系形成的偏序里,Möbius 反演就会退化成数论中熟悉的那种约数反演公式。 所以这条结论最值得强调的是:它并不是又一个零散公式,而是一个统一容斥、约数求和、反推原函数的总框架。
91. Combinatorial Nullstellensatz(知识型)
它给出多项式方法处理中组合存在性问题的强力工具。
前置:多项式、域、系数、零点、代数方法解决离散问题的基本意识。
定理解释: Combinatorial Nullstellensatz(组合零点定理)是多项式方法中的一个代表性工具。 它的基本精神是: 想证明某个离散配置存在,不一定非要直接构造,有时可以先造一个多项式。 然后通过研究这个多项式的某个高次项系数是否非零,来推出:在给定的取值集合里,总会有某个点使这个多项式不为零。 一旦“不为零”恰好对应于“目标结构存在”或“某种冲突没有发生”,问题就解决了。 这听起来很代数,但在组合里威力很大,因为很多离散限制条件都能被翻译成“某个多项式等于 0 或不等于 0”的形式。 所以它代表的是一种非常现代的思路: 把离散问题转成代数对象,再用代数信息反推组合存在性。
示例: 在一些加法组合或模意义构造题中,可以构造一个多项式,使得“多项式在所有候选点都为 0”会和某个非零系数矛盾,于是推出一定存在一个候选点使多项式不为 0。
示例解释: 这类题的关键不是算多项式值,而是先把“想要的性质”编码进多项式里。 比如说,若一个配置不合法,就让某个因子变成 0;若一个配置合法,就有机会使整个多项式不为 0。 然后再用组合零点定理说明:由于某个高次项系数非零,这个多项式不可能在整个笛卡尔积上都为 0。 于是就说明:至少有一个合法配置存在。 所以它特别适合那种“看起来很难构造,但又怀疑总能存在”的题。
92. Sunflower 猜想相关结论(知识型)
研究若干集合两两交集相同的“向日葵结构”。
前置:集合族、交结构、公共核、极值集合论。
定理解释: 向日葵(sunflower)是一类非常有代表性的集合族结构。 若若干个集合的两两交集全都相同,那么这个公共交集就叫“核”,其余互不重叠的部分就像一片片“花瓣”,因此叫向日葵。 这种结构的魅力在于: 它看起来很简单,但却是极值集合论和理论计算机科学中的一个高频对象。 因为一旦一个复杂集合族里出现向日葵,就说明这个集合族已经开始呈现出明显的规整性,不再是完全杂乱的。 所以围绕向日葵的很多问题,本质上都在问: “一个集合族如果大到某种程度,是否必然包含这样一个规整结构?” 这正是极值组合最典型的问题类型之一。
示例: 若有三个集合 \[ A_1,A_2,A_3 \] 满足 \[ A_1\cap A_2=A_1\cap A_3=A_2\cap A_3=K, \] 那么这三个集合就构成一个 3 花瓣向日葵,其中 \(K\) 是它们的核。
示例解释: 这意味着每个集合都可以写成 \[ A_i=K\cup P_i, \] 其中 \(P_i\) 是第 \(i\) 片花瓣,而且这些花瓣彼此不交。 所以向日葵的本质就是: 公共部分完全重合,而非公共部分又彼此分离。 这种结构在“大集合族中一定会不会出现某种规整子结构”的问题里特别重要。 它之所以显得生僻,是因为它不是最基础的计数工具,但一旦进入极值集合论,它就会频繁出现。
93. 平面图 Euler 公式
连通平面图满足
\[ V-E+F=2. \]
前置:平面图、点数 \(V\)、边数 \(E\)、面数 \(F\)、连通性。
定理解释: Euler 公式是平面图最根本的结构公式之一。 它把一个平面图里的三个基本量——顶点数、边数、面数——精确地联系起来。 这里的“面”不仅包括图内部围成的区域,还包括最外面的无限大区域。 这条公式的意义非常大,因为它说明: 平面图虽然看起来形状变化很多,但只要是连通的,它们在“点—边—面”的总平衡关系上始终受到一个固定约束。 所以后面很多平面图不等式,例如 \[ E\le 3V-6 \] 或对无三角形平面图的更强限制,都是从 Euler 公式出发推出来的。 它可以说是“平面结构受限”这一整套理论的起点。
示例: 立方体的骨架可看作一个平面图,它满足 \[ V=8,\qquad E=12,\qquad F=6, \] 所以 \[ 8-12+6=2. \]
示例解释: 虽然立方体本身是三维物体,但它的“点和棱组成的骨架图”可以不交叉地画在平面上,因此它是平面图。 这里的 6 个面,就是 5 个有限区域加上外部区域,或者按另一种平面嵌入方式理解成总共 6 个区域。 Euler 公式告诉我们:只要嵌入是平面的,这个数量关系就不会变。 所以它反映的不是某幅图画的偶然现象,而是平面图固有的拓扑性质。
94. Jordan 曲线型分割思想(知识型)
平面中的简单闭曲线把平面分成内外两个区域。
前置:平面拓扑直觉、闭曲线、区域分割、平面图的基本空间观念。
定理解释: Jordan 曲线定理从表面上看很直观: 一条不自交的闭曲线,好像天然就把平面分成“里面”和“外面”。 但真正严格证明它并不简单,所以它在数学史上其实是很重要的一条拓扑结论。 在组合和几何里,很多时候我们不会正式去写 Jordan 曲线定理,但会不停地使用它背后的思想: 只要一个简单闭合边界出现了,它就会围出一个区域。 这件事在平面图计数、区域切分、路径封闭、面数讨论里都非常关键。 所以这一条更像是“底层支撑原理”——平时不一定点名说它,但很多直观推理其实都在依赖它。
示例: 在讨论平面图时,若一条回路构成一个简单闭合边界,我们通常会自然认为它围出了一个内部区域,并与外部区域分开。
示例解释: 这种想法其实正是 Jordan 曲线型分割思想的体现。 例如在用 Euler 公式分析平面图时,我们默认“每增加一条形成新封闭边界的边,就会多出一个面”,这背后就离不开闭曲线把区域分开的直觉。 所以虽然它不像排列组合公式那样能直接套数值,但它是很多平面组合论证中不可缺少的背景事实。
95. 概率方法
通过构造随机对象并证明其期望或概率满足某性质,可推出满足要求的确定性对象存在。
前置:概率、随机试验、期望、存在性证明思想。
定理解释: 概率方法不是一条单独的定理,而是一整类非常强大的证明思想。 它最核心的一句口号可以概括为: 如果随机挑一个对象,有正概率是好的,那么好对象就一定存在。 这听起来简单,但威力极大,因为有很多组合对象很难直接构造,却可以很容易用随机方式“先挑一个试试”。 一旦能证明这个随机对象平均来看够好,或者直接有正概率满足要求,就得到了存在性结论。 这类方法特别适合处理: 极值图论、避免局部冲突、稀疏结构构造、染色存在性、集合族存在性等问题。 它的魅力就在于: 不是硬造,而是先随机,再证明随机过程不可能永远失败。
示例: 要证明某种图或集合存在,有时只需定义一个随机对象,并证明它满足目标性质的概率大于 0。
示例解释: 例如你想证明“存在一个没有某种坏结构、但边又很多的图”。 直接构造也许很难,但你可以先随机取边,得到一个随机图。 然后估计这个随机图中坏结构的期望数量、边数的期望数量。 若结果显示:平均来看,边数够多而坏结构不多,那么就说明至少有一个具体图同时拥有这两个优点。 这就是概率方法最典型的用法: 用“平均情况”倒逼“存在好情况”。
96. 期望线性性
对任意随机变量 \(X_1,\dots,X_n\),都有
\[ \mathbb E[X_1+\cdots+X_n]=\mathbb E[X_1]+\cdots+\mathbb E[X_n]. \]
前置:随机变量、期望、加法。
定理解释: 期望线性性是概率方法里最常用、最该牢牢记住的基本工具。 它最珍贵的地方在于:不要求独立性。 也就是说,不管这些随机变量彼此有没有关系、会不会互相影响,只要总量能写成很多部分之和,期望就可以拆开逐项算。 这在组合中太重要了,因为很多“总个数”本来就天然是若干个局部计数的和。 所以在做概率组合题时,最常见的套路就是: 先把目标量拆成很多个指示变量,然后再直接用期望线性性逐个求和。 这会把一个原本复杂的随机对象,化成很多个小而容易处理的局部问题。
示例: 求随机图中边数、三角形数、孤立点数的期望时,通常都先把总数写成很多个指示变量之和,再用期望线性性。
示例解释: 比如“三角形总数”可以写成: \[ X=\sum_{T} I_T, \] 其中 \(I_T\) 表示“给定三点组 \(T\) 是否形成三角形”的指示变量。 那么 \[ \mathbb E[X]=\sum_T \mathbb E[I_T]. \] 每一项 \(\mathbb E[I_T]\) 只是一个小概率,算起来很简单。 整个总数的期望,就被拆成一堆小块求和。 所以这条性质是概率组合的“最常用起手式”之一。
97. 二次矩法 / 方差法(知识型)
除期望外,方差与二次矩也常用于证明随机对象集中在某个范围内。
前置:方差、二次矩、Chebyshev 不等式、概率集中思想。
定理解释: 只知道期望,有时并不足以说明问题。 因为“平均值很好”并不代表“大多数情况都很好”:也许随机变量波动特别大,平均只是少数极端值拉出来的。 这时就需要看二次矩、方差这些衡量波动大小的量。 若方差足够小,就说明随机变量通常不会离期望太远,于是可以从“平均上好”进一步升级成“高概率上也好”。 所以二次矩法、方差法本质上是在回答: 这个随机对象是不是稳定?它是不是大多数时候都接近期望? 在高阶概率组合中,这一步经常是必须的。
示例: 研究某种结构“通常出现多少次”时,往往不能只算期望,还要估计方差,才能证明它真的会以很高概率出现在那个数量级附近。
示例解释: 例如你算出某种坏结构的期望数只有 1,这并不一定代表“通常只有 1 个”。 可能一半时候是 0,另一半时候是 100,也照样期望是某个小值。 只有当你进一步知道方差也不大,才能说明这个数量不会剧烈波动。 所以“期望法”解决的是存在性或平均规模问题,而“二次矩法 / 方差法”进一步研究的是集中性与稳定性。
98. 半随机法 / Alteration method(知识型)
先随机产生一个大对象,再删改少量坏部分,从而得到满足条件的对象。
前置:概率方法、极值思想、删改构造、局部修补思想。
定理解释: 半随机法(alteration method)可以看作概率方法的一种非常实用的加强版。 它的思想特别符合竞赛直觉: 一开始不要求对象完美,只要求“整体上已经不错”; 然后再把少量坏部分删掉、修掉、改掉,最后得到满足条件的对象。 它之所以强,是因为很多时候“直接构造一个完美对象”非常困难,但“先随机得到一个差不多的大对象”却容易得多。 如果坏部分数量不多,那么修补的代价就很小,于是整体仍然能保住主要优点。 所以它是一种典型的“两步走”方法: 先粗造,再精修。
示例: 构造一个边很多、但没有短环的图时,可以先随机取边,得到一个边数很多的随机图; 然后把每个短环中删去一条边,最后就能得到无短环图,而且剩下的边仍然很多。
示例解释: 这里最关键的是: 随机图虽然不完美,但它的“坏结构”(短环)预计并不太多; 而每个坏结构只需删掉很少一部分边就能破坏掉。 于是最后删掉的总边数不大,图的大部分规模还保留下来了。 这就是半随机法的典型威力: 不要求第一次就命中完美答案,而是先抓住“主体足够大”,再用局部修改清除缺陷。
99. Szemerédi 型思想(知识型)
大的稠密整数集或图中,往往强制出现长等差数列或复杂规整结构。
前置:Ramsey 思想、稠密性、极值结构、长等差数列、伪随机与规整结构的直觉。
定理解释: Szemerédi 型思想可以概括成一句非常有力量的话: 只要一个离散对象足够大、足够稠密,那么它不可能一直保持完全无结构,最终一定会长出某种规整模式。 在整数集合里,这种规整模式通常表现为长等差数列; 在图论或高维组合结构里,则可能表现为更复杂的规整子结构。 它和 Ramsey 思想有亲缘关系,但更强调“密度”而不是“染色”: 不是说你怎么分颜色都躲不开结构,而是说你只要保留了足够高的密度,就躲不开结构。 所以这是一种非常深层的“稠密即有结构”思想。 它对高阶组合、加法组合、图正则性理论都有巨大影响。
示例: Szemerédi 定理说明:若正整数的一个子集具有正密度,那么其中一定包含任意长的等差数列。
示例解释: 这里“正密度”的意思可以粗略理解成:这个集合在大范围里并不稀薄,而是始终占有一个固定比例级别。 Szemerédi 定理说:只要一个集合一直足够密,就不可能无限地逃避长等差数列。 它和 van der Waerden 定理都在讲“长等差数列终究会出现”,但视角不同: van der Waerden 强调有限染色下的单色结构必然出现; Szemerédi 强调高密度子集本身就必然含有长等差数列。 所以它可以看成“从染色 Ramsey 思想走向密度结构思想”的一个重要升级。
100. 组合专题链条建议
高阶组合里常见的一条学习链是:
前置:前述主干条目。
定理解释:这一条不再是单个定理,而是整个组合工具树的学习框架。目的是让孩子知道哪些内容该先学、哪些该后补。
示例:若孩子目前只会排列组合和抽屉原理,那么下一步通常应先打通容斥、双计数、Catalan 和基础递推。
示例解释:因为这些内容是后面集合族、图论、概率方法的共同基础,先把主干打通,后面才不容易断层。