组合数
组合数
方便起见,我们定义:
阶乘: 记 \(n!=\prod_{i=1}^ni=1\cdot2\cdots (n-1)\cdot n\) 为 \(n\) 的阶乘。规定 \(0! = 1\)
下降(阶乘)幂: 记 \(n^{\underline{m}}=\prod_{i=0}^{m-1}(n-i)=n\cdot(n-1)\cdot(n-2)\cdots (n-m+1)\) 为 \(n\) 的 \(m\) 次下降(阶乘)幂
加乘原理
一、加法原理
若一件事有 \(n\) 种完成方式,而每种方式有 \(m\) 种方法,那么这件事的完成方法有 \(\sum_{i=1}^nm_i\) 种。
二、乘法原理
若完成一件事有 \(n\) 个步骤,而完成每个步骤有 \(m\) 种方法,那么这件事的完成方法有 \(\prod_{i=1}^nm_i\) 种。
排列组合数
\(n\) 个互异元素中取 \(m\) 个组成的集合方案数,记为 \(C_n^m\) 或 \(\dbinom n m\)
在 \(n\) 个互异元素中按顺序选出 \(m\) 个的方案数,记为 \(A_n^m\)。
隔板法
- (每组至少 \(1\) 个) \(n\) 个元素分成 \(k\) 组,相当于将 \(k-1\) 个隔板放在 \(n\) 个元素个 \(n-1\) 个缝隙里,方案数 \(\binom {n-1}{k-1}\)
- (每组至少 \(0\) 个)借 \(k\) 个元素,放在 \(k\) 组里,剩下的 \(n\) 个元素正常放,无视掉那借的 \(k\) 个元素后便是合法方案,方法数 \(\binom{n+k-1}{k-1}=\binom{n+k-1}{n}\)
- (第 \(i\) 组至少 \(a_i\) 个)先借 \(\sum a_i\) 个,然后问题便转化成了每组至少 \(0\) 个,那么再借 \(k\),方案数 \(\binom{n - \sum a_i + k - 1}{n - \sum a_i}\)
不相邻的排列
\(1 \sim n\) 这 \(n\) 个自然数中选 \(k\) 个,这 \(k\) 个数中任何两个数都不相邻的组合有 \(\binom {n-k+1}{k}\) 种。
特殊排列组合
- 任选排列: \(n\) 个元素无限制地放入 \(m\) 个容器中,每个元素有 \(m\) 种选择,按乘法原理总方案数 \(m^n\)
- 可重排列: 从 \(n\) 个元素中可重复地选取 \(m\) 个,总方案数为 \(n^m\)。
- 圆排列: 从 \(n\) 个元素中选取 \(r\) 个排成一个圆的方案数称为圆排列数,记为 \(Q_n^r\) ,证明如下:
\(n\) 个人全部来围成一圈,所有的排列数记为 \(\mathrm Q_n^n\)。考虑其中已经排好的一圈,从不同位置断开,又变成不同的队列。
所以有
由此可知部分圆排列的公式:
二项式定理
二项式定理阐明了一个展开式的系数:
扩展为多项式:(设 \(n\) 为正整数, \(x_i\) 为实数)
其中的 \(\binom{n}{n_1,n_2,\cdots,n_t}\) 是多项式系数,它的性质:
二项式反演
证明:
在上面的证明中,为了方便,我们认为 \(0^0 = 1\)。
其他性质
- \(\sum_{i=1}^n\binom{n}{i}=2^n\)
- \(\sum_{i=1}^n(-1)^i\binom{n}{i}=[n=0]\)
- \(\sum_{i=1}^n\binom{n}{i}\binom m {k-i}=\binom{n+m}k\)
- \(\sum_{i=1}^n{\binom{n}{i}}^2=\binom {2n}n\)
- \(\sum_{i=0}^ni\binom{n}{i}=n2^{n-1}\)
- \(\sum_{i=0}^ni^2\binom{n}{i}=n(n+1)2^{n-2}\)
- \(\sum_{l=0}^n\binom{l}{k} = \binom{n+1}{k+1}\)
- \(\binom{n}{r}\binom{r}{k} = \binom{n}{k}\binom{n-k}{r-k}\)
- \(\sum_{i=0}^n\binom{n-i}{i}=F_{n+1}\) (其中 \(F\) 是斐波那契数列)
- \(\binom{n+k}{k}^2=\sum_{j=0}^k\binom{k}{j}^2\binom{n+2k-j}{2k}\)
卢卡斯定理
在模 \(p\) 意义下求 \(\binom{n}{m}\%p\) :
\(n,m\) 取值范围较小,直接预处理阶乘
\(n,m\) 取值范围较大时预处理不可接受,若 \(p\) 较小且为质数,考虑结合模性质优化:
对于素数 \(p\),有:
其中,当 \(n<m\) 时,二项式系数 \(\dbinom{n}{m}\) 规定为 \(0\)
时间复杂度 \(O(f(p)+g(n)\log n)\),其中 \(f(n)\) 为预处理组合数的复杂度,\(g(n)\) 为单次处理组合数的复杂度。
具体的证明可以参考 oi-wiki 的证明。
卡特兰数
卡特兰数是一种特殊的组合递推数列,记为 \(H_n\),应用十分广泛。
一、定义
- 卡特兰数的计算公式
- 其他的卡特兰数公式
容斥原理
设全集 \(U\) 中元素有 \(n\) 种不同的属性,而第 \(i\) 种属性为 \(P_i\),拥有属性 \(P_i\) 的元素构成集合 \(S\),那么
抽屉原理
- 简单情况
将 \(n+1\) 个物体,划分为 \(n\) 组,那么有至少一组有两个(或以上)的物体。
证明考虑反证法:假如每个分组有至多 \(1\) 个物体,那么最多有 \(1\times n\) 个物体,而实际上有 \(n+1\) 个物体,矛盾。
- 推广
将 \(n\) 个物体,划分为 \(k\) 组,那么至少存在一个分组,含有大于或等于
\(\left \lceil \dfrac{n}{k} \right \rceil\) 个物品。
推广的形式也可以使用反证法证明:若每个分组含有小于
\(\left \lceil \dfrac{n}{k} \right \rceil\) 个物体,则其总和
矛盾。
此外,划分还可以弱化为覆盖结论不变。
给定集合 \(S\), 一个 \(S\) 的非空子集构成的簇 \(\{A_1,A_2\ldots A_k\}\):
- 若满足 \(\bigcup_{i=1}^k A_i\) 则称为 \(S\) 的一个覆盖(cover)。
- 若一个覆盖还满足 \(i\neq j\to A_i\cap A_j=\varnothing\) 则称为 \(S\) 的一个划分。
抽屉原理可以有如下叙述:对于 \(S\) 的一个覆盖 \(\{A_1,A_2\ldots A_k\}\) 有至少一个集合 \(A_i\) 满足 \(\left\vert A_i \right\vert \geq \left\lceil \dfrac{\left\vert S \right\vert}{k} \right\rceil\)。

浙公网安备 33010602011771号