组合数学:从入门到被入门

废话不多说,直接开始讲吧。

加法&乘法原理

略。

排列与组合基础

排列数

组合数就是从 \(n\) 个不同元素中选择 \(m\) 个元素组成列表的方案数,记作 \(A_n^m\)

计算排列数的公式为: \(\displaystyle A_n^m=\frac{n!}{(n-m)!}\)

直观理解一下,第一个数有 \(n\) 种选法,第二个数有 \(n-1\) 种选法,以此类推,第 \(m\) 个数有 \(n-m+1\) 种选法,所以总共的选法是:

\[\begin{aligned} A_n^m&=n(n-1)(n-2)\cdots(n-m+1)\\ &=\frac{n(n-1)(n-2)\cdots3\times 2\times 1}{(n-m)(n-m-1)(n-m-2)\cdots3\times 2\times 1}\\ &=\frac{n!}{(n-m)!} \end{aligned}\]

组合数

组合数就是从 \(n\) 个不同元素中选择 \(m\) 个元素组成集合的方案数,记作 \(\displaystyle C_n^m=\binom nm\)

计算组合数的公式为:\(\displaystyle\binom nm=\frac{n!}{m!(n-m)!}\)

由于一个大小为 \(m\) 的集合对应 \(m!\) 个列表,所以 \(\displaystyle\binom nm=\frac{A_n^m}{m!}=\frac{n!}{m!(n-m)!}\)

本文内认为如果 \(m<0\)\(m>n\) ,则令 \(\displaystyle\binom nm=0\)(建议读者在写的时候也判一下)

组合数有几个性质:

  1. \(\displaystyle\binom nm=\binom n{n-m}\)(选 \(m\) 个元素组成集合相当于选 \(n-m\) 个元素组成这个集合的补集)

  2. \(\displaystyle\binom nk=\frac nk\binom{n-1}{k-1}\)(定义式)

  3. \(\displaystyle\binom nm=\binom{n-1}{m}+\binom{n-1}{m-1}\) (选 \(m\) 个元素组成集合,可以考虑选不选最后一个元素,于是可以得到一个递推式)

  4. \(\displaystyle(a+b)^n=\sum_{i=0}^n\binom ni a^ib^{n-i}\)

上面这个式子就是所谓的二项式定理,其中容易用到的几种特殊情况如下:

  • \(a=b=1:\displaystyle\sum_{i=0}^n\binom ni=2^n\)
  • \(a=1,\ b=-1:\displaystyle\sum_{i=0}^n\binom ni(-1)^i=[n=0]\)
  • \(b=1:\displaystyle\sum_{i=0}^n\binom nia^i=(a+1)^i\)

还有一个神奇的性质:

  1. \(\displaystyle\sum_{i=0}^m \binom ni\binom m{m-i}=\binom{m+n}m\ \ \ (n\geq m)\)

这个性质不是特别会证,但是有的时候拆组合数用得到。

  1. \(\displaystyle\sum_{i=0}^n \binom ni^2=\binom{2n}n\)(上式的特殊情况)

插板法

用于求解一些组合问题。

例:求将 \(n\) 个小球放在 \(k\) 个盒子里,小球相同,盒子不相同,不允许为空的方案数。(\(k\) 个正整数加起来 \(=n\) 的方案数)

由于这道题只考虑每个盒子里小球的数量,考虑把这 \(n\) 个小球排成一列,可以考虑在每两个小球中间选择性地插入一块板子,总共插 \(k-1\) 份,把小球分成 \(k\) 组。可以证明插板的方案数和原题方案数是相同的。

答案是 \(\displaystyle\binom {n-1}{k-1}\)

例:求将 \(n\) 个小球放在 \(k\) 个盒子里,小球相同,盒子不相同,允许为空的方案数。(\(k\) 个自然数加起来 \(=n\) 的方案数)

先在 \(k\) 个盒子里各预留一个元素,也就是将原来的 \(n\) 个小球变为 \(n+k\) 个,然后就变成了不允许为空的方案数,插板法即可。

答案是 \(\displaystyle\binom {n+k-1}{n}\)

例:求 \(k\) 个整数加起来 \(=n\) ,并且第 \(i\) 个数 \(\ge a_i\) 的方案数。

和上一道题基本一样,只需要把多的减掉,少的加上即可。

答案是 \(\displaystyle\binom {n-\sum a_i+k-1}{n-\sum a_i}\)

容斥

基本公式

省流:

\[|S_1\cup S_2\cup\cdots\cup S_n|=\sum_{b_1}|S_{b_1}|-\sum_{b_1<b_2}|S_{b_1}\cap S_{b_2}|+\sum_{b_1<b_2<b_3}|S_{b_1}\cap S_{b_2}\cap S_{b_3}|+\cdots+(-1)^{n-1}|S_{b_1}\cap S_{b_2}\cap\cdots\cap S_{b_n}| \]

\[|S_1\cap S_2\cap\cdots\cap S_n|=\sum_{b_1}|S_{b_1}|-\sum_{b_1<b_2}|S_{b_1}\cup S_{b_2}|+\sum_{b_1<b_2<b_3}|S_{b_1}\cup S_{b_2}\cup S_{b_3}|+\cdots+(-1)^{n-1}|S_{b_1}\cup S_{b_2}\cup\cdots\cup S_{b_n}| \]

\[\left|\bigcup_{i=1}^{n}S_i\right|=\sum_{i=1}^n(-1)^{i-1}\sum_{a_1<a_2<a_3<\cdots<a_i}\left|\bigcap_{j=1}^iS_{a_j}\right| \]

\[\left|\bigcap_{i=1}^{n}S_i\right|=\sum_{i=1}^n(-1)^{i-1}\sum_{a_1<a_2<a_3<\cdots<a_i}\left|\bigcup_{j=1}^iS_{a_j}\right| \]

例题见OI Wiki

建议推一下错排数练练手。

二项式反演

代数意义

当容斥时几个集合的交集(并集)大小只和集合数量有关,跟具体是哪几个集合无关时,就会有以下式子:

\(f(n)=|n\) 个集合的交集大小\(|\)\(g(n)=|n\) 个集合的并集大小\(|\),则有:

\[f(n)=\sum_{i=0}^n (-1)^i\binom nig(i)\Leftrightarrow g(n)=\sum_{i=0}^n (-1)^i\binom nif(i) \]

于是这就是二项式反演的形式之一了,我们把这种形式叫做“形式零”,因为这种形式通常不用。

形式一:

\[f(n)=\sum_{i=0}^n\binom nig(i)\Leftrightarrow g(n)=\sum_{i=0}^n (-1)^{n-i}\binom nif(i) \]

这也就是把左边的 \(-1\) 提到了右边,证明不难。

其实还有一个更通用的式子是这样的:

\[f(n)=\sum_{i=m}^n\binom nig(i)\Leftrightarrow g(n)=\sum_{i=m}^n (-1)^{n-i}\binom nif(i) \]

形式二:

\[f(n)=\sum_{i=n}^m\binom ing(i)\Leftrightarrow g(n)=\sum_{i=n}^m (-1)^{i-n}\binom inf(i) \]

组合意义

我们令 \(f(x)\) 代表钦定选 \(i\)的方案数, \(g(x)\)代表 恰好选 \(i\)的方案数。

(注:在 \(f(x)\) 中,每种方案可能被统计多次,它是让你先选择 \(i\) 个,计算出选了这 \(i\) 个的方案数,最终再求和)

则对于任意的 \(i\ge n\)\(g(i)\)\(f(n)\) 里被算了 \(\binom in\) 次,故 \(\displaystyle f(n)=\sum_{i=n}^m\binom ing(i)\) ,采用形式二即可。

min-max 容斥

有一些求 \(\min\)\(\max\) 的题可以用得到。

还是先把式子放上来:

\[\max_{i\in S}{x_i}=\sum_{T\subseteq S}{(-1)^{|T|-1}\min_{j\in T}{x_j}} \]

\[\min_{i\in S}{x_i}=\sum_{T\subseteq S}{(-1)^{|T|-1}\max_{j\in T}{x_j}} \]

这个式子主要在求期望的时候用处比较大:

\[E\left(\max_{i\in S}{x_i}\right)=\sum_{T\subseteq S}{(-1)^{|T|-1} E\left(\min_{j\in T}{x_j}\right)} \]

\[E\left(\min_{i\in S}{x_i}\right)=\sum_{T\subseteq S}{(-1)^{|T|-1} E\left(\max_{j\in T}{x_j}\right)} \]

于是就可以实现最大值问题和最小值问题之间的转化了。

实际上这个式子对于第 \(k\) 大(小)也是成立的:

\[\underset{i\in S}{\operatorname{kthmax}{x_i}}=\sum_{T\subseteq S}{(-1)^{|T|-k}\dbinom {|T|-1}{k-1}\min_{j\in T}{x_j}} \]

\[\underset{i\in S}{\operatorname{kthmin}{x_i}}=\sum_{T\subseteq S}{(-1)^{|T|-k}\dbinom {|T|-1}{k-1}\max_{j\in T}{x_j}} \]

\[E\left(\underset{i\in S}{\operatorname{kthmax}{x_i}}\right)=\sum_{T\subseteq S}{(-1)^{|T|-k}\dbinom {|T|-1}{k-1}E\left(\min_{j\in T}{x_j}\right)} \]

\[E\left(\underset{i\in S}{\operatorname{kthmin}{x_i}}\right)=\sum_{T\subseteq S}{(-1)^{|T|-k}\dbinom {|T|-1}{k-1}E\left(\max_{j\in T}{x_j}\right)} \]

以上式子也可以用来推 \(\operatorname{lcm}\)\(\gcd\) ,只不过把求和换成了求积,系数 \(-1\) 变成了逆元。

一些经典的数列

斐波那契数列 & 卢卡斯数列

定义

斐波那契数列的定义如下:

\[F_0=0,F_1=1,F_n=F_{n-1}+F_{n-2} \]

卢卡斯数列的定义如下:

\[L_0=2,L_1=1,L_n=L_{n-1}+L_{n-2} \]

大家应该对斐波那契数列相对要熟悉一点,而分析斐波那契数列就要用到卢卡斯数列。

通项公式(解析解)

斐波那契数列的通项公式如下:

\[F_n=\frac{\left(\frac{1+\sqrt5}{2}\right)^n-\left(\frac{1-\sqrt5}{2}\right)^n}{\sqrt5} \]

卢卡斯数列的定义如下:

\[L_n=\left(\frac{1+\sqrt5}{2}\right)^n+\left(\frac{1-\sqrt5}{2}\right)^n \]

这两个式子虽然在OI中不常见,但是当涉及取模意义下的二次剩余和逆元时就很有用了。

事实上,有 \(L_n^2-5F_n^2=-4\)

通项公式(矩阵)

众所周知,有很多递推式能通过矩阵求解。

以斐波那契数列为例:

\[\begin{bmatrix}F_{n+1}\\F_{n}\end{bmatrix}=\begin{bmatrix}1&1\\1&0\end{bmatrix}\begin{bmatrix}F_{n}\\F_{n-1}\end{bmatrix} \]

因此

\[\begin{aligned}\begin{bmatrix}F_{n}\\F_{n-1}\end{bmatrix}&=\begin{bmatrix}1&1\\1&0\end{bmatrix}^{n-1}\begin{bmatrix}F_{1}\\F_{0}\end{bmatrix}\\&=\begin{bmatrix}1&1\\1&0\end{bmatrix}^{n-1}\begin{bmatrix}1\\1\end{bmatrix}\end{aligned} \]

如果你对矩阵运算不是很熟悉的话,建议写一下【模板】矩阵加速(数列)

卢卡斯数列同理。

顺便说一句,关于斐波那契数列和组合数,有一个奇妙的性质:

\[\sum_{i=0}^n\binom{n-i}{i}=F_{n+1} \]

错位排列

错排数是指 \(p_i\neq i\) 的排列 \(\{p_i\}\) 的方案数。

错排数可以用容斥原理求,建议手推一下。

结论是:

\[d_n=n!\sum_{i=1}^n\frac{(-1)^{i-1}}{i!} \]

推导过程

\(S_i\)\(p_i=i\) 的排列 \(\{p_i\}\) 所组成的集合,则我们要求 \(\displaystyle n!-\left|\bigcup_{i=1}^nS_i\right|\) 的值。
带入容斥式子,由于这里集合并的大小只和集合数有关,和具体元素无关(因为我们不关心哪几个元素,只关心有几个元素满足 \(p_i=i\)),于是问题变成了求 \(\displaystyle\left|\bigcap_{i=1}^k s_i\right|\)
上式的意思是 \(k\) 个元素满足 \(p_i=i\) ,剩下的随便排的方案数,所以是 \((n-k)!\)
于是整个式子就变成了

\[\begin{aligned} d_n&=\sum_{i=1}^n(-1)^{i-1}\binom ni(n-i)!\\ &=\sum_{i=1}^n(-1)^{i-1}\frac{n!}{i!}\\ &=n!\sum_{i=1}^n\frac{(-1)^{i-1}}{i!} \end{aligned} \]

posted @ 2023-05-31 10:11  SqrtSecond  阅读(766)  评论(0编辑  收藏  举报