研究生课程 · 组合数学

组合数学

组合数学研究"有多少种方式":排列、分组、配对、着色、走格。它的三大武器——鸽笼(存在性)、容斥(精确计数)、生成函数(把数列变成代数)——支撑着算法设计与复杂度分析。

1 计数的基本原理

概念排列、组合与二项式恒等式

乘法原理(分步相乘)、加法原理(分类相加)。
排列 P(n,r) = n!/(n−r)!(有顺序);组合 C(n,r) = n!/[r!(n−r)!](无顺序)。
多重集排列:n 个元素含重复,全排列数 = n!/(n₁!n₂!…);多重集组合(隔板法):C(n+k−1, k−1)。
常用恒等式:帕斯卡 C(n,r) = C(n−1,r−1) + C(n−1,r);ΣᵣC(n,r) = 2ⁿ;范德蒙德 C(m+n,r) = Σ C(m,k)C(n,r−k); Hockey-stick Σ_{i=r}^{n}C(i,r) = C(n+1,r+1)。

2 鸽笼原理

定理抽屉里的必然

简单形式:n+1 个物体放入 n 个抽屉 ⇒ 必有抽屉含 ≥ 2 个物体。
加强形式:n 个物体放入 k 个抽屉 ⇒ 必有抽屉含 ≥ ⌈n/k⌉ 个。
典型应用:任取 13 人必有两人同月生;n+1 个 ≤ 2n 的正整数中必有两个互质(相邻数);拉姆齐数 R(3,3)=6(任何 6 人中必有 3 人互相认识或互相陌生)。

操作生日悖论模拟器 ⭐(鸽笼的概率表亲)

房间里多少人,"有人同一天生日"就过半?直觉说 183,答案是 23。调节人数、模拟 500 个房间验证:

随堂检测计数与鸽笼

3 容斥原理

定理多退少补

|A∪B∪C| = |A|+|B|+|C| − |A∩B|−|A∩C|−|B∩C| + |A∩B∩C|
补集形式(数论利器):≤N 中能被 a₁..aₖ 之一整除的个数 = Σ⌊N/aᵢ⌋ − Σ⌊N/lcm⌋ + …
经典应用:欧拉函数 φ(n) = n·Π(1−1/p);错排数 Dₙ = n!·Σ(−1)ᵏ/k!。

操作三集合容斥计算器(维恩图实时上数)

输入三个集合及各交集的大小(各区域自动算出并检查一致性):

|A| |B| |C|
|A∩B| |A∩C| |B∩C| |A∩B∩C|

4 生成函数

概念把数列编码成多项式

普通生成函数 G(x) = Σaₙxⁿ;
关键对应:组合问题的"独立选择" ↔ 生成函数相乘(系数卷积恰好合并方案数)。
常用:1/(1−x) = Σxⁿ(无限取);1/(1−x)ᵏ = ΣC(n+k−1,k−1)xⁿ(隔板法);斐波那契的 G(x) = x/(1−x−x²)。
指数生成函数(排列问题):Σaₙxⁿ/n!。

操作骰子卷积 = 生成函数相乘 ⭐

掷两枚骰子点数之和的分布 = 系数卷积。左:两枚骰子各自的分布;右:卷积结果(理论 vs 模拟):

(x + x² + x³ + x⁴ + x⁵ + x⁶)² 的系数 = 1,2,3,4,5,6,5,4,3,2,1——"和为 7"恰是中间的 6/36。生成函数把计数问题变成乘法。

5 递推关系

方法特征根法解常系数线性递推

aₙ = c₁aₙ₋₁ + c₂aₙ₋₂:特征方程 r² = c₁r + c₂。
① 两异实根 r₁, r₂ ⇒ aₙ = A r₁ⁿ + B r₂ⁿ;② 重根 r ⇒ (A + Bn)rⁿ;③ 共轭复根 ρe^{±iθ} ⇒ ρⁿ(A cos nθ + B sin nθ)。
斐波那契:F₁ = F₂ = 1,特征根 φ = (1+√5)/2 与 ψ = (1−√5)/2,Binet 公式 Fₙ = (φⁿ − ψⁿ)/√5。

操作斐波那契与黄金分割 ⭐

前 18 项与相邻两项之比 Fₙ₊₁/Fₙ 如何逼近 φ = (1+√5)/2 ≈ 1.618:

6 Catalan 数、Stirling 数与错排

概念三个明星数列

Catalan 数 Cₙ = C(2n,n)/(n+1):合法括号序、n+1 边形三角剖分、不越过对角线的格路、二叉树计数。1, 1, 2, 5, 14, 42, 132…
递推 Cₙ₊₁ = ΣCᵢCₙ₋ᵢ;反射原理:好路径 C(2n,n) − C(2n,n+1)。
第二类 Stirling 数 S(n,k):n 元集划分成 k 块的方案数,n 个球放 k 个相同盒子(不空)。
错排 Dₙ:n 个元素全部不在原位的排列;Dₙ = n!Σ(−1)ᵏ/k! → n!/e(信封问题)。

操作Catalan 格路(反射原理图解)

从 (0,0) 到 (n,n) 只走右/上、且不越过红对角线的路径数就是 Catalan 数。绿色为一条合法路径,灰色为"越界即被反射"的坏路径:

总路径 C(2n,n);越过对角线的坏路径与到 (n+1, n−1) 的路径一一对应(在首次越界处反射)——于是合法数 = C(2n,n) − C(2n,n−1) = C(2n,n)/(n+1)。

随堂检测生成函数与特殊数列