Loading

组合数学习笔记

组合数

定义

普通定义

\[\binom nm=\frac{n!}{m!\ (n-m)!} \]

这里,当 \(n<m\) 时,认为该式值为 \(0\)

扩展定义

\[\binom nm=\frac{n^{\underline m}}{m!}\quad(n\in\mathbb C,m\in\mathbb N) \]

基本性质

对称性

\[\binom nm=\binom n{n-m} \]

显然。

加法公式

\[\binom nm=\binom{n-1}m+\binom{n-1}{m-1} \]

证明:组合意义。

\(n\) 中选 \(m\) 个,可分为两种情况:

  • 选第 \(n\) 个,则需在前 \(n-1\) 个中选 \(m-1\) 个。
  • 否则需在前 \(n-1\) 个中选 \(m\) 个。

上指标求和

\[\sum_{i=0}^n\binom ik=\binom{n+1}{k+1} \]

证明:数学归纳法。

  • \(n=k\) 时,显然有 \(\binom kk=\binom{k+1}{k+1}\)
  • \(n>k\) 时,设结论在 \(\mathbb N\cap[0,n-1]\) 上成立,根据加法公式,有:

\[\begin{aligned} \binom{n+1}{k+1}&=\binom nk+\binom n{k+1}\\ &=\binom nk+\sum_{i=0}^{n-1}\binom ik\\ &=\sum_{i=0}^n\binom ik \end{aligned} \]

因此,结论成立。

吸收恒等式

\[m\binom nm=n\binom{n-1}{m-1} \]

\[\binom nm\binom mk=\binom nk\binom{n-k}{m-k} \]

证明:第一个式子显然是第二个式子在 \(k=1\) 时的特殊情况,所以只需证明第二个式子。

组合意义。从 \(n\) 中选出 \(m\) 个,再从这 \(m\) 个中选 \(k\) 个,等价于先从 \(n\) 中选出 \(k\) 个,再把这 \(k\) 个与另外 \(m-k\) 个凑出 \(m\) 个。

范德蒙德卷积

\[\sum_{i+j=m}=\binom ki\binom{n-k}j=\sum_{i=0}^m\binom ki\binom{n-k}{m-i}=\binom nm \]

证明:组合意义。考虑前 \(k\) 个选几个,把所有情况相加即可。

其他

\[\sum_{i=0}^ni\binom ni=2^{n-1}n\qquad \sum_{i=0}^ni^2\binom ni=2^{n-2}n(n+1) \]

二项式定理

\[(a+b)^n=\sum_{i=0}^n\binom nia^ib^{n-i} \]

证明:考虑展开 \((a+b)^n\) 后,\(a^ib^{n-i}\) 的系数,显然为在 \(n\)\((a+b)\) 中选 \(i\)\(a\) 的情况总数。

广义二项式定理

\[(x+y)^{\alpha}=\sum_{k\ge 0}\binom{\alpha}{k}x^ky^{\alpha-k}\quad(\alpha\in\mathbb R) \]

练习 1

求:

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

解:设原式为 \(f(n)\)

\[\begin{aligned} f(n)&=\sum_{i=0}^n\binom{n-i}i\\ &=\sum_{i=0}^n\binom{n-1-i}i+\binom{n-1-i}{i-1}\\ &=\sum_{i=0}^{n-1}\binom{n-1-i}i+\sum_{i=1}^{n-1}\binom{n-1-i}{i-1}\\ &=\sum_{i=0}^{n-1}\binom{n-1-i}i+\sum_{i=0}^{n-2}\binom{n-2-i}i\\ &=f(n-1)+f(n-2) \end{aligned} \]

\(f(0)=1,f(1)=1\),故 \(f(n)=F_{n+1}\),其中 \(F_i\) 表示斐波那契数列的第 \(i\) 项。

另一种方法是利用斐波那契数列的组合意义。
求一个 \(2\times n\) 的棋盘,使用任意多张 \(1\times 2\) 的骨牌 完全 覆盖所有格子的方案数。设有 \(f_n\) 种方案。
讨论第 \(n\) 列是被一张竖着放的骨牌覆盖,还是被两张横着放的骨牌覆盖,即可得知 \(f_n=f_{n-1}+f_{n-2}\)

由于边界为 \(f_0=1\),因此 \(f_n=F_{n+1}\)。用组合数计算。若有 \(2i\) 张横着放置的骨牌,则一对在同一列上的骨牌会占据两列。
所以先减去 \(i\) 列(肯定会被占用),然后从剩下的列中选 \(i\) 列就是答案。所以 \(f_n=\sum_{i=0}^n\binom{n-i}i\)

练习 2

求:

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

解:

\[\begin{aligned} \sum_{i=0}^n\binom{m+i-1}{i} &=\sum_{i=0}^n\binom{m+i-1}{m-1}\\ &=\sum_{i=0}^{m+n-1}\binom{i}{m-1}\\ &=\binom{m+n}{m} \end{aligned} \]

第一步和第三步分别运用了对称性、上指标求和。

斯特林数

第二类斯特林数

定义

\(\begin{Bmatrix}n\\m\end{Bmatrix}\) 表示将 \(n\) 个不同的元素划分为 \(m\) 个互不区分的非空集合的方案数。

性质

\[\begin{Bmatrix}n\\m\end{Bmatrix}=\begin{Bmatrix}n-1\\m-1\end{Bmatrix}+m\begin{Bmatrix}n-1\\m\end{Bmatrix} \]

边界:\(\begin{Bmatrix}n\\0\end{Bmatrix}=[n=0]\)

第一类斯特林数

定义

\(n\) 个人坐在 \(m\) 张非空圆桌上的方案数记为第一类斯特林数,用 \(\begin{bmatrix}n\\m\end{bmatrix}\) 表示。

性质

\[\begin{bmatrix}n\\m\end{bmatrix}=\begin{bmatrix}n-1\\m-1\end{bmatrix}+(n-1)\begin{bmatrix}n-1\\m\end{bmatrix} \]

边界:\(\begin{bmatrix}n\\0\end{bmatrix}=[n=0]\)

下降幂和上升幂

定义

\[a^{\underline n}=\prod_{k=a-n+1}^ak \]

\[a^{\overline n}=\prod_{k=a}^{a+n-1}k \]

斯特林数的性质

下降幂、上升幂与幂的转化

\[x^{\overline m}=\sum_{k=0}^m\begin{bmatrix}m\\k\end{bmatrix}x^k\\ x^{\underline m}=\sum_{k=0}^m(-1)^{m-k}\begin{bmatrix}m\\k\end{bmatrix}x^k\\ x^m=\sum_{k=0}^m\begin{Bmatrix}m\\k\end{Bmatrix}x^{\underline k} \]

通项公式

\[\begin{Bmatrix}m\\k\end{Bmatrix}=\frac 1{k!}\sum_{i=0}^k(-1)^{k-i}\binom kii^m \]

容斥原理

基本公式

\(S\) 为有限集,\(A_1,A_2,\cdots,A_n\subseteq S\)\(A=\{A_1,A_2,\cdots,A_n\}\) 则有:

\[|\bigcup_{i=1}^{n}A_i|=\sum_{k=1}^n(-1)^{k-1}\sum_{1\le i_1<i_2<\cdots<i_k\le n}|\bigcap_{j=1}^kA_{i_j}| \]

证明:

设一个元素被 \(A\) 中的 \(m\) 个集合包含,则它对左侧贡献为 \(1\)
它对右侧的贡献为:\(\sum_{i=1}^m(-1)^{i-1}\binom{m}{i}\)(从这 \(m\) 个集合中任选几个集合都会包含)

\(=-\sum_{i=1}^m(-1)^i\binom{m}{i}=1-\sum_{i=0}^m(-1)^i\binom{m}{i}=1-(1-1)^m=1\)

德 · 摩根定律

\[\overline{\bigcup_{i=1}^nA_i}=\bigcap_{i=1}^n\overline{A_i}\qquad\qquad\overline{\bigcap_{i=1}^nA_i}=\bigcup_{i=1}^n\overline{A_i} \]

基本公式的变形

根据德摩根定律变形:

\[\begin{aligned} |\bigcap_{i=1}^n\overline{A_i}|&=|\overline{\bigcup_{i=1}^{n}A_i}|\\ &=|S|-\sum_{k=1}^n(-1)^{k-1}\sum_{1\le i_1<i_2<\cdots<i_k\le n}|\bigcap_{j=1}^kA_{i_j}|\\ &=|S|+\sum_{k=1}^n(-1)^{k}\sum_{1\le i_1<i_2<\cdots<i_k\le n}|\bigcap_{j=1}^kA_{i_j}| \end{aligned} \]

\[\begin{aligned} |\bigcap_{i=1}^nA_i|&=|\overline{\bigcup_{i=1}^n\overline{A_i}}|\\ &=|S|-\sum_{k=1}^n(-1)^{k-1}\sum_{1\le i_1<i_2<\cdots<i_k\le n}|\bigcap_{j=1}^k\overline{A_{i_j}}|\\ &=|S|+\sum_{k=1}^n(-1)^{k}\sum_{1\le i_1<i_2<\cdots<i_k\le n}|\bigcap_{j=1}^k\overline{A_{i_j}}| \end{aligned} \]

子集反演

定义在两个集合上的函数 \(\mathbf{f,g}\),若

\[\mathbf f(S)=\sum_{T\subseteq S}\mathbf g(T) \]

\[\mathbf g(S)=\sum_{T\subseteq S}(-1)^{|S|-|T|}\mathbf f(T) \]

以后有时间再证明吧。感觉和二项式反演的证明思路可能差不多。

二项式反演

这是子集反演的特殊情况:多个集合的交集大小只和集合数目有关,而与具体是哪些集合无关。

我们用 \(g(i)\) 表示某 \(i\) 个补集的交集大小(即不满足某 \(i\) 个条件的方案数),
\(f(i)\) 表示某 \(i\) 个原集的交集大小(即钦定 / 至少满足某 \(i\) 个条件的方案数)。
特别地,\(f(0)=g(0)=|S|\),因为 \(0\) 个条件相当于任意情况。

根据上面的变形公式,我们有:

\[\begin{aligned} f(n)&=|S|+\sum_{k=1}^n(-1)^k\binom nkg(k)\\ &=\sum_{k=0}^n(-1)^k\binom nkg(k)\\ g(n)&=|S|+\sum_{k=1}^n(-1)^k\binom nkf(k)\\ &=\sum_{k=0}^n(-1)^k\binom nkf(k) \end{aligned} \]

\(h(k)=(-1)^kg(k)\) 再代进去,可以得出:

\[\begin{aligned} f(n)&=\sum_{k=0}^n\binom nkh(k)\\ h(n)&=\sum_{k=0}^n(-1)^{n+k}\binom nkf(k)\\ &=\sum_{k=0}^n(-1)^{n-k}\binom nkf(k) \end{aligned} \]

能得出二项式反演:

\[\begin{aligned} f(n)&=\sum_{k=0}^n\binom nkh(k)\\ h(n)&=\sum_{k=0}^n(-1)^{n-k}\binom nkf(k) \end{aligned} \]

另一种表述是,若两个序列 \(f,g\) 满足:

\[f_n=\sum_{i=0}^n\binom nig_i \]

\[g_n=\sum_{i=0}^n(-1)^{n-i}\binom nif_i \]

是其充分必要条件。

这里的 \(f,g\) 貌似代表什么都可以。
也就是说,我们可以不关心其具体意义,只要在推出这种式子时,知道它能够与另一个式子相互转化就可以了。

也可以用代入法证明(下面为了方便,把序列形式改成了函数形式)。

\[\begin{aligned} f(n)&=\sum_{i=0}^n(-1)^i\binom nig(i)\\ &=\sum_{i=0}^n(-1)^i\binom ni\sum_{j=0}^i(-1)^{i-j}\binom ijf(j)\\ &=\sum_{i=0}^n\sum_{j=0}^i(-1)^{i-j}\binom ni\binom ijf(j)\\ &=\sum_{j=0}^nf(j)\sum_{i=j}^n(-1)^{i-j}\binom ni\binom ij\\ &=\sum_{j=0}^n\binom njf(j)\sum_{i=j}^n(-1)^{i-j}\binom{n-j}{i-j}\\ &=\sum_{j=0}^n\binom njf(j)\sum_{k=0}^{n-j}(-1)^k\binom{n-j}{k}\\ &=\sum_{j=0}^n\binom njf(j)(1-1)^{n-j} \end{aligned} \]

这时我们不能直接把后面那项变为 \(1\),需要分类讨论。

  • \(n-j\ne 0\) 时,\((1-1)^{n-j}=0\)
  • 否则,回到上式,其值为 \(\sum_{k=0}^0\binom0k=\binom00=1\)
  • 综上,\(\sum_{j=0}^n\binom nj(1-1)^{n-j}=1\)

最终,得出了 \(f(n)=f(n)\),证毕。

另外一种二项式反演的式子也比较常用:

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

证明为把右侧代入左侧,不再赘述。

这个式子的组合意义为 \(f(n)\) 表示钦定选 \(n\) 个,\(g(n)\) 为恰好选 \(n\) 个的方案数。如果选择这种组合意义,那么 \(f(n)\) 是一个无效的数,因为钦定 \(n\) 个表明存在重复的情况。所以“钦定”只能作为转化的工具,在题目中不能独立存在。同样地,在计算 \(f\) 时也不要刻意去重,因为“钦定”的性质已经表明 \(f\) 很可能存在重复情况。

应用

题目常让我们求:

  • 至少满足一个条件(所有集合并集大小)
  • 恰好满足所有条件(所有集合交集大小)

然而,我们能求的是:

  • 至少满足某 \(k\) 个条件 (某 \(k\) 个集合交集大小)

我们运用上面的公式转化一下就可以了。

P6076[JSOI2015]染色问题

先考虑颜色。“每种颜色在棋盘上至少出现一次”就是“每种颜色都要出现”。

套二项式反演:

\[g_A(c)=\sum_{i=0}^c(-1)^{c-i}\binom cif_A(i) \]

对于行,我们可以强制它满足限制。也就是在计算列的时候,把方案数减一。

考虑列。

套二项式反演:

\[g_B(m)=\sum_{i=0}^m(-1)^{m-i}\binom mif_B(i) \]

\[f_B(i)=((k+1)^i-1)^n \]

\[f_A(k)=g_B(m)=\sum_{i=0}^m(-1)^{m-i}\binom mi((k+1)^i-1)^n \]

再代回就可以了。

推导第二类斯特林数的通项公式

复习一下,\(\begin{Bmatrix}m\\k\end{Bmatrix}\) 定义是
\(m\) 个不同的元素划分为 \(k\) 个互不区分的非空集合的方案数。

设数列 \(g_k\) 表示将 \(m\) 个互不相同的元素划分为 \(k\) 个有区别集合的方案数,
\(f_k\) 表示将 \(m\) 个互不相同的元素划分为 \(k\) 个有区别非空集合的方案数。
那么显然,\(g_k=k^m\)

通过枚举非空集合的个数,可以得知:

\[g_k=\sum_{i=0}^k\binom kif_i \]

套用二项式反演:

\[f_k=\sum_{i=0}^k(-1)^{k-i}\binom kig_i \]

由于斯特林数中,集合互不区分,故 \(\begin{Bmatrix}m\\k\end{Bmatrix}=\dfrac{f_k}{k!}\)

所以得出结论:

\[\begin{Bmatrix}m\\k\end{Bmatrix}=\frac 1{k!}\sum_{i=0}^k(-1)^{k-i}\binom kii^m \]

posted @ 2022-07-21 07:32  hihihi198  阅读(266)  评论(0)    收藏  举报