组合数学是研究计数和排列组合的数学分支!从密码学到概率论,从算法设计到优化问题,组合数学无处不在。
什么是组合数学?
组合数学(Combinatorics)是研究离散对象的计数、排列、组合和结构的数学分支。
简单理解
组合数学就像"数数":
- 有多少种方法排列对象?
- 有多少种方法选择对象?
- 有多少种方法组合对象?
什么是排列?
排列(Permutation)是从 n 个不同元素中取出 r 个元素,按一定顺序排列。
排列数
从 n 个不同元素中取出 r 个元素的排列数:
P(n,r)=(n−r)!n!=n(n−1)(n−2)⋯(n−r+1)
例子:从 5 个人中选 3 个人排成一列,有多少种方法?
P(5,3)=5×4×3=60
全排列
n 个不同元素的全排列数:
P(n,n)=n!
例子:3 个人排成一列,有 3!=6 种方法。
有重复元素的排列
如果 n 个元素中有 n1 个相同、n2 个相同、……、nk 个相同,则排列数:
n1!n2!⋯nk!n!
例子:单词 "MISSISSIPPI" 的字母有多少种排列?
1!×4!×4!×2!11!=115239916800=34650
什么是组合?
组合(Combination)是从 n 个不同元素中取出 r 个元素,不考虑顺序。
组合数
从 n 个不同元素中取出 r 个元素的组合数(二项式系数):
C(n,r)=(rn)=r!(n−r)!n!=r!P(n,r)
例子:从 5 个人中选 3 个人组成小组,有多少种方法?
C(5,3)=3!2!5!=12120=10
组合数的性质
对称性
C(n,r)=C(n,n−r)
递推关系
C(n,r)=C(n−1,r−1)+C(n−1,r)
这就是帕斯卡三角形(Pascal's Triangle)的递推关系。
二项式定理
(x+y)n=∑r=0nC(n,r)xn−ryr
例子:(x+y)3=x3+3x2y+3xy2+y3
计数原理
加法原理
如果完成一件事有 m 种方法,完成另一件事有 n 种方法,且两种方法互不重叠,则完成其中一件事有 m+n 种方法。
乘法原理
如果完成一件事需要 m 个步骤,第 i 个步骤有 ni 种方法,则完成这件事有 n1×n2×⋯×nm 种方法。
例子:从 3 件上衣和 4 条裤子中选一套衣服,有多少种方法?
3×4=12
容斥原理
容斥原理(Inclusion-Exclusion Principle)用于计算多个集合的并集的元素个数。
对于两个集合:
∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
对于三个集合:
∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣
例子:在 100 个学生中,60 人学数学,50 人学物理,30 人两门都学,有多少人至少学一门?
∣M∪P∣=∣M∣+∣P∣−∣M∩P∣=60+50−30=80
生成函数