组合计数基础

组合计数基础知识点简要整理

排列数

定义

\(P_n^m\)\(n\) 个不同元素选出 \(m\) 个排成一列,可以得到不同的排列的数量:

\[P_n^m = \dfrac{n!}{(n-m)!} = \prod\limits_{i=n-m+1}^n i \]

组合数

定义

\(C_n^m\) 表示从 \(n\) 个不同元素选出 \(m\) 个,组成不同的集合的数量(也可记作 \({n\choose m}\)):

\[C_n^m = \dfrac{n!}{m!(n-m)!} = \dfrac{\prod_{i=n-m+1}^n i}{\prod_{i=1}^m i} \]

性质

  • \(C_{n+m}^n = C_{n+m}^m\)
  • \(C_n^m = C_{n-1}^m+C_{n-1}^{m-1}\)
  • \(\sum_{i=0}^n C_n^i = 2^n\)
  • \(C_n^k = C_n^{k-1} \times \frac{n-k+1}{n}\)

求法

  1. 使用性质 \(C_n^m = C_{n-1}^m+C_{n-1}^{m-1}\) 递推,计算出 \(n\) 范围以内的所有组合数。复杂度 \(O(n^2)\)
  2. 递推出 \(0 \sim n\) 的阶乘及其逆元,那么 \(C_n^m = n! \times (m!)^{-1} \times [(n-m)!]^{-1}\)。复杂度 \(O(n)\)
  3. 使用 \(C_n^k = C_n^{k-1} \times \frac{n-k+1}{n}\) 递推出 \(C_n^0 \sim C_n^n\) 的值。复杂度 \(O(n)\)
  4. Lucas 定理。见下。

经典问题

多重集排列数

\(n_1\)\(a_1\)\(n_2\)\(a_2\),……,\(n_k\)\(a_k\) 组成的多重集可得的本质不同的排列数为:

\[\dfrac{(\sum_{i=1}^k n_i)!}{\prod_{i=1}^k (n_i!)} \]

多重集组合数

\(n_1\)\(a_1\)\(n_2\)\(a_2\),……,\(n_k\)\(a_k\) 组成的多重集选出 \(R(\le \min\limits_{1\le i\le n} n_i)\) 个元素,得到的本质不同的多重集数为:

\[{{k-1}\choose{k+R-1}} \]

二项式定理

\((a+b)^n\) 展开可得:

\[(a+b)^n = \sum\limits_{k=0}^n C_n^k a^k b^{n-k} \]

Lucas 定理

\(p\) 为质数,有:

\[{n\choose m} \equiv {{n\bmod p}\choose {m\bmod p}} \times {{\left\lfloor{n/p}\right\rfloor} \choose {\left\lfloor{m/p}\right\rfloor}} \pmod p \]

\(p\) 不太大时,可以在 \(O(p \log_p n)\) 的时间 求出组合数。

Catalan 数

定义

定义第 \(n\) 个 catalan 数为 \(h(n)\),定义式:

\[h(n) = \dfrac{C_{2n}^n}{n+1} \]

性质

  • 递推式 1:

    \[h(n) = \begin{cases} 1 & n\le 1 \\ \sum\limits_{i=0}^{n-1} h(i) \times h(n-i - 1) & \text{otherwise.} \end{cases} \]

  • 递推式 2:\(h(n) = \frac{4n-2}{n+1}\times h(n-1)\)

  • \(h(n) = C_{2n}^n - C_{2n}^{n+1}\)

经典问题

  • 出栈次序问题
  • 三角网格路径记数
  • 二叉树计数

容斥原理

定义

集合 \(S_1, S_2, \cdots ,S_n\) 的并集为:

\[\left|{\Large\operatorname{\cup}\limits_{i=1}^n} S_i\right| = \sum\limits_{1\le i\le n} |S_i| - \sum\limits_{1\le i\le j\le n} |S_i\cap S_j| + \sum\limits_{1\le i\le j\le k\le n} |S_i\cap S_j\cap S_k| - \cdots + (-1)^{n+1}|\operatorname{\cap}\limits_{i=1}^n S_i| \]

经典问题

多重集组合数(拓展)

现在讨论上述该问题 \(R\) 无限制的问题。

不考虑 \(n_i\) 的限制,那么等价于从集合 \(\{\infty\cdot a_1, \infty\cdot a_2, \cdots \infty\cdot a_k\}\) 中抽取 \(R\) 个的方案数,答案为 \({k+R-1\choose k-1}\)

若设 \(f_i\) 为限定 \(n_i+1\) 个元素选 \(a_i\),剩下个元素任意选的方案数。那么方案数为 \({k+R-n_i-2\choose k-1}\)

\(f_{i, j}\) 为限定 \(n_i +1, n_j+1\)\(a_i, a_j\) 选中,剩下任意选的方案数。那么即为 \({k+R-n_i-n_j-3 \choose k-1}\)

根据容斥原理,并用总方案数减去非法方案数,有:

\[{k+R-1 \choose k-1} - \sum\limits_{1\le i\le k} {k+R-n_i-2 \choose k-1} + \sum\limits_{1\le i\le j\le k} {k+R-n_i-n_j-3\choose k-1} - \cdots +(-1)^k {k+R-\sum_{i=1}^k n_i-(k+1) \choose k-1} \]

二项式反演

\[g(i) = \sum\limits_{j=1}^i {i\choose j} f(j) \quad \Leftrightarrow \quad f(i) = \sum\limits_{j=1}^i (-1)^{i-j} {i\choose j} g(j) \]

证明:

将第一个式子代入第二个中:

\[f(i)=\sum\limits_{j=1}^i (-1)^{i-j} {i\choose j} \sum\limits_{k=1}^j {j\choose k} f(k) \]

\(a(i)\)\(f(i)\) 的系数。那么:

\[a(k) = \sum\limits_{j=k}^i (-1)^{i-j} {i\choose j}{j\choose k} \\ = \sum\limits_{j=k}^i (-1)^{i-j} \dfrac{i! j!} {j!(i-j)!k!(j-k)!}\\ = \sum\limits_{j=k}^i (-1)^{i-j} \dfrac{i!} {(i-j)!k!(j-k)!}\\ = \sum\limits_{j=k}^i (-1)^{i-j} \dfrac{(i-k)!} {(i-j)!(j-k)!}\times \dfrac{i!}{k!(i-k)!}\\ = \sum\limits_{j=k}^i (-1)^{i-j} {i-k\choose j-k}{i\choose k} \]

对于 \(\sum_{j=k}^i (-1)^{i-j} {i-k\choose j-k}\) 其实可以理解为第 \(i-k\) 行的组合数错位相减的结果。如果 \(i-k=0\) 那么这个式子就是 \(1\),但否则由于 \({n\choose m} - {n\choose n-m} = 0\),所以两两抵消后结果为 \(0\)。所以:

\[a(k) = [i=k]\times {i\choose k} = [i=k]\\ f(i) = \sum\limits_{k=1}^i a(k)f(k) = f(i) \]

于是该式得证。

第一类斯特林数

定义

\(\begin{bmatrix} n \\ k \end{bmatrix}\)\(n\) 个不同元素分成 \(k\) 个非空环排列的方案数。

递推式

考虑此时新插入第 \(n\) 个元素:

  • 单独构成一个环:\(\begin{bmatrix} n-1 \\ k-1 \end{bmatrix}\)
  • 插入已有的 \(k\) 个环中。发现本质不同的位置有 \(n-1\) 个,那么方案数:\((n-1)\begin{bmatrix} n-1 \\ k \end{bmatrix}\)
  • 于是:

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

生成函数

设第 \(n\) 行的第一类斯特林数的生成函数为 \(f(n) = \sum_{i=0}^n \begin{bmatrix} n \\ i \end{bmatrix} x^i\)

根据递推式,有:\(f(n+1) = f(n)\times (n+x)\)

于是:\(f(n) = \prod\limits_{i=0}^{n-1} (x+i) = x^{\overline{n}}\)

性质

根据生成函数,有:

\[x^{\overline{n}} = \sum_{i=0}^{n} \begin{bmatrix} n\\i \end{bmatrix} x^i \]

下降幂形式(\(\prod_{i-0}^{n-1}(x+i) \to \prod_{i-0}^{n-1}(x-i)\)):

\[x^{\underline{n}} = \sum\limits_{i=0}^n (-1)^{n-i}\begin{bmatrix} n\\i \end{bmatrix} x^i \]

第二类斯特林数

定义

\(\begin{Bmatrix} n\\k \end{Bmatrix}\) 表示把 \(n\) 个不同元素分成 \(k\) 个非空集合的方案数。

两种方案不同当且仅当存在一个集合仅在其中一种方案中出现。

递推式

考虑此时新插入第 \(n\) 个元素:

  • 单独组成一个集合:\(\begin{Bmatrix} n-1\\k-1 \end{Bmatrix}\)
  • 插入原有的 \(k\) 个集合之一:\(k\begin{Bmatrix} n-1\\k \end{Bmatrix}\)
  • 于是:

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

通项公式

我们在原定义上的非空集合加上标号,那么方案数为 \(k!\times\begin{Bmatrix} n\\k \end{Bmatrix}\)

在上述定义上改为可空集,那么方案数 \(k^n\)。但是可以写成另一种写法——枚举所有集合中非空的个数:

\[k^n = \sum_{i=0}^k {k \choose i} \begin{Bmatrix} n\\i \end{Bmatrix} \times i! \]

二项式反演后:

\[\begin{Bmatrix} n\\k \end{Bmatrix} = \dfrac{1}{k!}\sum_{i=0}^k (-1)^{k-i} {k\choose i} \times i^n = \sum\limits_{i=0}^k \dfrac{(-1)^{k-i}\times i^n}{(k-i)!\times i!} \]

性质

与下降幂的关系:

\[x^{n} = \sum\limits_{i=0}^n \begin{Bmatrix} n\\i \end{Bmatrix} x^{\underline{i}} \]

证明:

显然 \(n=0\) 是成立的。对于其他情况,使用数学归纳法,假设 \(n-1\) 时该式成立——\(x^{\underline{n}} = x\cdot x^{\underline{n-1}} = \sum\limits_{i=1}^{n-1} \begin{Bmatrix} n-1\\i \end{Bmatrix} x \cdot x^{\underline{i}}\)

由于 \(x^{\underline{n}} \cdot x = i\cdot x^{\underline{n}} + (x-i)\cdot x^{\underline{n}} = i\cdot x^{\underline{n}}+x^{\underline{n+1}}\),那么:

\[\sum\limits_{i=1}^{n-1} \begin{Bmatrix} n-1\\i \end{Bmatrix} x\cdot x^{\underline{i}} \\ = \sum\limits_{i=1}^{n-1}\left(\begin{Bmatrix} n-1\\i \end{Bmatrix} i\cdot x^{\underline{i}} + \begin{Bmatrix} n-1\\i \end{Bmatrix}x^{\underline{i+1}}\right)\\ =\sum\limits_{i=0}^n \left(\begin{Bmatrix}n - 1\\ i - 1 \end{Bmatrix} + i \begin{Bmatrix}n- 1\\ i\end{Bmatrix}\right)x^{\underline i} \\ = \sum\limits_{i=0}^n \begin{Bmatrix} n\\i \end{Bmatrix} x^{\underline i} \]

转化为上降幂形式:

\[x^n = \sum\limits_{i=0}^n(-1)^{n-i} \begin{Bmatrix} n\\i \end{Bmatrix} x^{\overline i} \]

斯特林反演

反转公式

\[\sum\limits_{i=j}^n (-1)^{n-i} \begin{bmatrix} n\\i \end{bmatrix} \begin{Bmatrix} i\\j \end{Bmatrix} = \sum\limits_{i=j}^n (-1)^{i-j} \begin{Bmatrix} n\\i \end{Bmatrix} \begin{bmatrix} i\\j \end{bmatrix} = [n=j] \]

证明:

由上文得:

\[x^n = \sum\limits_{i=0}^n \begin{Bmatrix} n\\i \end{Bmatrix} x^{\underline i}, \quad x^{\underline{n}} = \sum\limits_{i=0}^n (-1)^{n-i}\begin{bmatrix} n\\i \end{bmatrix} x^i \]

将第二个代到第一个式子里面:

\[x^{\underline{n}} =\sum\limits_{i=0}^n (-1)^{n-i}\begin{bmatrix} n\\i \end{bmatrix} \left(\sum\limits_{j=0}^i \begin{Bmatrix} i\\ j \end{Bmatrix}x^{\underline{j}} \right)\\ = \sum\limits_{j=0}^n x_j \left( \sum\limits_{i=j}^n (-1)^{n-i} \begin{bmatrix} n\\i \end{bmatrix} \begin{Bmatrix} i\\j \end{Bmatrix} \right) \]

把最后的式子和 \(x^{\underline{n}}\) 比对一下,发现 \(\sum\limits_{i=j}^n (-1)^{n-i} \begin{bmatrix} n\\i \end{bmatrix} \begin{Bmatrix} i\\j \end{Bmatrix} = [n=j]\)

同样的,将上面的式子从第一个代入第二个,会有:

\[x^n = \sum\limits_{j=0}^n x^j \left(\sum\limits_{i=j}^n (-1)^{i-j} \begin{Bmatrix} n\\j \end{Bmatrix} \begin{bmatrix} i\\j \end{bmatrix} \right) = \sum\limits_{j=0}^n x^j[n=j] \]

得到反转公式:

\[\sum\limits_{i=j}^n (-1)^{n-i} \begin{bmatrix} n\\i \end{bmatrix} \begin{Bmatrix} i\\j \end{Bmatrix} = \sum\limits_{i=j}^n (-1)^{i-j} \begin{Bmatrix} n\\i \end{Bmatrix} \begin{bmatrix} i\\j \end{bmatrix} = [n=j] \]

反演公式

\[g(n) = \sum\limits_{i=0}^n \begin{Bmatrix} n\\ i \end{Bmatrix} f(i) \quad \Leftrightarrow \quad f(n)= \ \sum\limits_{i=0}^n (-1)^{n-i}\begin{bmatrix} n\\ i \end{bmatrix} g(i) \]

证明:

若已知:

\[f(n)= \ \sum\limits_{i=0}^n (-1)^{n-i}\begin{bmatrix} n\\ i \end{bmatrix} g(i) \]

那么:

\[g(n) = \sum\limits_{i=0}^n[i=n] g(i)\\ = \sum\limits_{i=0}^n \sum\limits_{j=i}^n (-1)^{j-i} \begin{Bmatrix}n\\ j\end{Bmatrix} \begin{bmatrix}j\\ i\end{bmatrix} g(i)\\ = \sum\limits_{j=0}^n \begin{Bmatrix}n\\ j\end{Bmatrix} \sum\limits_{i=0}^j (-1)^{j-i} \begin{bmatrix}j\\ i\end{bmatrix} g(i)\\ = \sum\limits_{j=0}^n \begin{Bmatrix} n\\ j \end{Bmatrix} f(j) \]

于是其中一个得证,另一个反着做即可。

后记

posted @ 2020-08-14 19:36  -Wallace-  阅读(631)  评论(0编辑  收藏  举报