若完成一件事有 n 类方法,第 i 类有 mi 种方法,各类方法互不相容,则完成该事共有 m1+m2+⋯+mn 种方法。
若完成一件事需 n 个步骤,第 i 步有 mi 种方法,则完成该事共有 m1×m2×⋯×mn 种方法。
例:从 A 到 B 有3条路,从 B 到 C 有4条路,从 A 经 B 到 C 有 3×4=12 种走法。
无重复排列:从 n 个不同元素中取 r 个排列:
P(n,r)=(n−r)!n!
全排列:P(n,n)=n!
有重复排列:从 n 个不同元素中取 r 个(允许重复)排列:nr
圆排列:n 个不同元素的圆排列数:(n−1)!
无重复组合:从 n 个不同元素中取 r 个:
(rn)=C(n,r)=r!(n−r)!n!
多重组合(可重复组合):从 n 种元素中取 r 个(允许重复):
(rn+r−1)=(n−1n+r−1)
例:将10个相同的球放入3个不同的盒子,有多少种方法?
可重复组合:(1010+3−1)=(1012)=66。
Pascal 恒等式:(rn)=(r−1n−1)+(rn−1)
二项式定理:(x+y)n=∑k=0n(kn)xkyn−k
特殊值:
- ∑k=0n(kn)=2n
- ∑k=0n(−1)k(kn)=0
- ∑k=0n(kn)2=(n2n)(Vandermonde 恒等式的特例)
Vandermonde 恒等式:(rm+n)=∑k=0r(km)(r−kn)
设多重集 S={n1⋅a1,n2⋅a2,…,nk⋅ak},n=n1+n2+⋯+nk,则全排列数为:
n1!⋅n2!⋯nk!n!
例:MISSISSIPPI 的字母排列数。
M:1, I:4, S:4, P:2,共11个字母。
1!⋅4!⋅4!⋅2!11!=34650
∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣
∣⋃i=1nAi∣=∑i∣Ai∣−∑i<j∣Ai∩Aj∣+∑i<j<k∣Ai∩Aj∩Ak∣−⋯+(−1)n+1∣A1∩⋯∩An∣
n 个元素的错排(derangement)数:
Dn=n!(1−1!1+2!1−⋯+(−1)nn!1)=n!∑k=0nk!(−1)k
例:4个人的帽子全戴错的方案数。
D4=4!(1−1+21−61+241)=24⋅249=9
不超过 n 且与 n 互素的正整数个数:
φ(n)=n∏p∣n(1−p1)
其中 p 取遍 n 的所有不同素因子。
例:φ(12)=12(1−21)(1−31)=12⋅21⋅32=4。
将 n+1 个物品放入 n 个盒子,至少有一个盒子包含至少2个物品。
将 n 个物品放入 k 个盒子,则至少有一个盒子包含至少 ⌈n/k⌉ 个物品。
例:在任意 n+1 个正整数中,必有两个数之差是 n 的倍数。
考虑这 n+1 个数除以 n 的余数,余数只有 0,1,…,n−1 共 n 种,由鸽巢原理,必有两个数余数相同,其差是 n 的倍数。
例:在边长为1的正三角形中任取5个点,必有两点距离不超过 21。
将正三角形分为4个边长为 21 的小正三角形,5个点放入4个区域,必有2个在同一区域,距离不超过 21。
an+c1an−1+c2an−2+⋯+ckan−k=0
特征方程:xk+c1xk−1+⋯+ck=0
求解:
- 单根 r:贡献 Arn
- m 重根 r:贡献 (A0+A1n+⋯+Am−1nm−1)rn
例:Fibonacci 数列 Fn=Fn−1+Fn−2,F0=0,F1=1。
特征方程:x2−x−1=0,x=21±5。
Fn=51[(21+5)n−(21−5)n]
an+c1an−1+⋯+ckan−k=f(n)
通解 = 齐次通解 + 非齐次特解
特解形式取决于 f(n):
| f(n) | 特解形式 |
|---|
| c(常数) | A |
| cnd | A0+A1n+⋯+Adnd |
| c⋅rn | Arn(r 不是特征根) |
| c⋅rn | Anrn(r 是单特征根) |
序列 {an} 的普通生成函数:
G(x)=∑n=0∞anxn
| 序列 | 生成函数 |
|---|
| (kn) | (1+x)n |
| 1,1,1,… | 1−x1 |
| 1,−1,1,−1,… | 1+x1 |
| 0,1,2,3,… | (1−x)2x |
| (kn+k−1) | (1−x)n1 |
例:用1元、2元、5元硬币凑出 n 元的方案数。
生成函数:
G(x)=1−x1⋅1−x21⋅1−x51
an 为 G(x) 展开式中 xn 的系数。
E(x)=∑n=0∞ann!xn
适用于排列计数问题。
| 序列 | 指数生成函数 |
|---|
| 1,1,1,… | ex |
| P(n,k) | (1+x)n |
| 1,0,1,0,… | coshx |
| 0,1,0,1,… | sinhx |
Cn=n+11(n2n)=(n+1)!n!(2n)!
前几项:C0=1,C1=1,C2=2,C3=5,C4=14,C5=42
Cn=∑i=0n−1CiCn−1−i,C0=1
Cn 计数的问题:
- n 对括号的合法匹配数
- n+1 个矩阵连乘的加括号方式数
- 从 (0,0) 到 (n,n) 不越过对角线的路径数
- n 个节点的不同二叉搜索树个数
- 凸 n+2 边形的三角剖分数
- 栈的合法出栈序列数
例:3对括号的合法匹配:C3=5 种。
((())), (()()), (())(), ()(()), ()()()
C(x)=∑n=0∞Cnxn=2x1−1−4x
s(n,k):将 n 个不同元素排成 k 个非空轮换的方案数。
递推:
s(n,k)=s(n−1,k−1)+(n−1)⋅s(n−1,k)
边界:s(0,0)=1,s(n,0)=0(n>0),s(n,n)=1
与阶乘的关系:
xn=x(x−1)(x−2)⋯(x−n+1)=∑k=0ns(n,k)xk
S(n,k):将 n 个不同元素分成 k 个非空子集的方案数。
递推:
S(n,k)=S(n−1,k−1)+k⋅S(n−1,k)
边界:S(0,0)=1,S(n,0)=0(n>0),S(n,n)=1,S(n,1)=1
与幂的关系:
xn=∑k=0nS(n,k)xk
显式公式:
S(n,k)=k!1∑j=0k(−1)k−j(jk)jn
例:S(4,2)=7。
4个元素分成2个非空子集:{1}{2,3,4}, {2}{1,3,4}, {3}{1,2,4}, {4}{1,2,3}, {1,2}{3,4}, {1,3}{2,4}, {1,4}{2,3}。
Bn=∑k=0nS(n,k)
Bn 是 n 个元素的划分总数。
前几项:B0=1,B1=1,B2=2,B3=5,B4=15,B5=52
递推:Bn+1=∑k=0n(kn)Bk
指数生成函数:∑n=0∞Bnn!xn=eex−1