前言
这一期是关于csp S组必考的排列组合。讲述了排列组合的基本概念。 (这东西他们tm是真的难,老CS了)
1.排列(Permutation/Arrangement)
定义:从给定的n个不同元素中,去出指定个数为 m( m≤n )的元素进行排序.
通俗来说就是从n个不同的人中,叫那m出来排队。
公式:
\( A_n^m = P_n^m= n*(n-1)*(n-2)*...*(n-m+1)=\frac{n!}{(n-m)!} \)
别看那么复杂说白了就是从n乘到(n−m+1)。
例子:
A53=P53=5∗4∗3=60
注:\( A_n^m \) 和 \(P_n^m\) 是一样的。只是因为排列的英文有两个(Permutation/Arrangement)
📘 例题(排列应用)
题目:
从 7 名不同学生(A、B、C、D、E、F、G)中,选出 4 人 排成一列队形(顺序不同算不同队形)。
问:共有多少种不同的排队结果?
答案:840
解析:
定义回顾:从给定的n个不同元素中,去出指定个数为 m( m≤n )的元素进行排序.
题目中:n=7,m=4;
所以 \( A_7^4=7 * 6 * 5 * 4 =42 * 20 =840 \)
特殊排列类型
- 全排列 (Full Permutation)
- 定义: 从n个不同元素中取出全部n个元素,按照一定的顺序排成一列,所得到的排列称为全排列,全排列是排列数公式中m=n的情况。
- 公式:
Ann=Pnn=n!
- 可重复排列 (Permutation with Repetition)
- 定义: 从n个不同元素中,每次允许重复选取元素,取出m个元素进行排列。换句话说,就是n个元素中的每个元素都可以无限量供应。
- 公式: 由于每次选取都有n种选择,且可以重复,根据乘法原理,可重复排列的公式为:
nm
n1!n2!⋯nk!n!
- 例子:字符串
BANANA,其中 B 有 1 个,A 有 3 个,N 有 2 个,总长度 6:
1!3!2!6!=60
- 圆排列
- 定义:n 个不同元素围成一圈,旋转后相同算同一种排列。
- 公式:
(n−1)!
- 例子:4 个人围一张圆桌坐,排列数为 (4−1)!=3!=6。
- 如果规定翻转后相同也算同一种,例如项链问题,通常还要再除以 2:
2(n−1)!
- 错位排列
- 定义:n 个元素排列,要求每个元素都不在自己的原位置上。
- 递推公式:
D1=0,D2=1
Dn=(n−1)(Dn−1+Dn−2)
Dn=n!i=0∑ni!(−1)i
- 例子:3 个元素错位排列 D3=2,例如 1,2,3 可以变成 2,3,1 或 3,1,2。
2. 组合(Combination)
定义
从 n 个不同元素中,取出 m 个元素,不考虑顺序,叫做组合。
也就是说:
- 排列:AB 和 BA 不同;
- 组合:AB 和 BA 相同。
公式
$$C_n^m=\binom{n}{m}=\frac{A_n^m}{m!}=\frac{n!}{m!(n-m)!}$$
其中 Cnm 也常写作 (mn),读作“n 选 m”。
例子
从 5 个人中选 3 个人组成一个队伍,不排队:
C53=3!2!5!=10
如果这 3 个人还要排成一列,则是:
A53=5×4×3=60
也可以理解为:
A53=C53×3!=10×6=60
组合的重要性质
1. 对称性
Cnm=Cnn−m
例如:C52=C53=10。
2. 边界值
Cn0=Cnn=1
3. 杨辉三角递推式
Cnm=Cn−1m−1+Cn−1m
这个在动态规划、组合数预处理中非常常用。
4. 二项式定理
(a+b)n=m=0∑nCnman−mbm
例如:
(a+b)3=C30a3+C31a2b+C32ab2+C33b3
可重复组合
从 n 种不同元素中,取出 m 个元素,允许重复,且不考虑顺序。
公式:
Cn+m−1m=Cn+m−1n−1
- 例子:有苹果、香蕉、橘子 3 种水果,买 3 个,允许重复,不考虑顺序:
C3+3−13=C53=10
可以理解为方程:
x1+x2+⋯+xn=m
的非负整数解个数,其中 xi 表示第 i 种元素取了多少个。
用隔板法:
- 非负整数解:Cn+m−1n−1
- 正整数解:Cm−1n−1
3. 排列与组合的关系
核心关系:
Anm=Cnm×m!
意思是:
- 先从 n 个里面选出 m 个:Cnm;
- 再把这 m 个排列:m!;
- 合起来就是排列数 Anm。
所以:
- 有序:排列;
- 无序:组合;
- 先选后排:组合乘阶乘。
4. CSP S 常见注意点
- 有序用排列,无序用组合。
- 可重复排列是 nm。
- 可重复组合是 Cn+m−1m。
- 有重复元素全排列要除以重复元素阶乘。
- 圆排列是 (n−1)!。
- 错位排列用递推:Dn=(n−1)(Dn−1+Dn−2)。
- 组合数取模常用阶乘 + 逆元:
$$C_n^m\bmod p=fac[n]\times invfac[m]\times invfac[n-m]\bmod p$$
其中:
invfac[i]=(fac[i])p−2modp
这是 CSP / 竞赛里非常常见的组合数预处理方式。
综合小例题
从 5 名男生、4 名女生中选出 3 名男生和 2 名女生,并排成一排。
先选人:
C53×C42=10×6=60
再排列:
5!=120
所以总数:
60×120=7200
答案:
7200
到这里,排列组合的基础框架就差不多完整了:排列、组合、全排列、可重复排列、多重集排列、圆排列、错位排列、可重复组合。
再往后刷题时,常见方法还有:捆绑法、插空法、隔板法、容斥原理、DP 计数等。