组合数学
参考资料
- 离散数学及其应用 - 翻译版, 包括 "离散数学" 和组合数学 / 初等数论 /... - 4
基础计数原理
基本法则
- 加法原理: 若 A∩B=∅, 则 ∣A∪B∣=∣A∣+∣B∣
- 乘法原理: ∣A×B∣=∣A∣⋅∣B∣
- 容斥原理: ∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
- 除法法则 类似计数时重复计算, 最终结果需要除以重复次
- 鸽巢原理: 将 n 个物体放入 k 个盒子, 至少存在一个盒子包含 ⌈n/k⌉ 个物体
排列组合
允许重复的排列组合
- 排列与组合
- 排列(有序, 可重复): nr
-
组合(无序, 可重复): (rn+r−1)
-
多重集排列
- 若集合中有重复元素, 排列数为 ∏i(ki!)n!, 其中 ki 为第 i 类元素的重复次数
-
将 n 个相同元素分为 k 组, 每组大小为 Ri, 则分组方式为 ∏i=1k(Ri!)n!
| 重复组合 | C(n+k−1,k) | 3 种水果买 5 个: C(7,5)=21 |
-
字典序生成排列
- 比特串生成组合
高级计数技术
递推关系
常系数齐次线性递推关系
对于递推关系:
an=c1an−1+c2an−2+⋯+ckan−k
- 特征方程法
- 特征方程为: rk−c1rk−1−c2rk−2−⋯−ck=0
- 若特征根 r1,r2,…,rk 互异, 通解为
an=A1r1n+A2r2n+⋯+Akrkn
- 若存在重根(如二重根 r), 对应解为 (A+Bn)rn
常系数非齐次线性递推关系
an=c1an−1+⋯+ckan−k+F(n)
- 求解步骤
- 先求齐次方程的通解 an(h)
- 再找一个特解 an(p)(形式与 F(n) 相关)
- 通解为 an=an(h)+an(p)
生成函数
- 生成函数是以一个数列的变形作为不同幂次项的系数的多项式和式
- 普通生成函数指数列项直接为系数 G(x)=∑k=0∞akxk
- 它显然是数学工具
广义二项式
- 将 C(n,k) 中 n 推广为实数
- 广义二项式定理 (1+x)n=∑k=0∞(kn)xk(∣x∣<1)
斐波那契数列
- F(n)=F(n−1)+F(n−2)
- 卢卡斯数列 L(n) 是以 2,1 开始的斐波那契数列 F(n)
- 注意到 L(n)2−5F(n)2=−4
- 以斐波那契数列相邻两项作为输入会使欧几里德算法达到最坏复杂度
- 2L(m+n)=5F(m)F(n)−L(m)L(n)
- 2F(m+n)=F(m)L(n)+L(m)F(n)
特殊计数序列
卡特兰数
\(Cn=nudefinedn+1C(2n,n)\)
应用场景:
- 合法括号序列数
- 二叉树形态数
- 凸多边形三角剖分数
斯特林数
- 第二种斯特林数 S(n,k) 表示将 n 个不同的元素分成 k 个非空集合的方案数
- 第一种斯特林数 S(n,k) 表示将 n 个不同的元素分成 k 个非空轮换的方案数
- 一组元素 (n 个) 的轮换是指将这组元素的排列顺序循环右移一位得到的 n 个排列
组合恒等式
经典问题
错位排列
- Dn=(n−1)(Dn−1+Dn−2)(D1=0,D2=1)
- 封闭形式: Dn=n!∑k=0nk!(−1)k
夫妻围坐
- n 对夫妻围坐一圈, 每对夫妻之间有一个人, 问有多少种方案:
- 2n(2n)!−∑k=1n(−1)k+1C(n,k)2k(2n−1−k)!