斯特林数与斯特林反演

斯特林数与斯特林反演(Stirling)

首先,我们要了解斯特林数的定义。

第一类斯特林数

第一类斯特林数\(\begin{bmatrix} n \\ m\end{bmatrix}\) 表示将\(n\)个两两不同的元素,划分为\(m\)个非空圆排列的方案数。

递推式

\[\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]\)

该递推式的证明可以考虑其组合意义。

我们插入一个新元素时,有两种方案:

  • 将该新元素置于一个单独的圆排列中,共有\(\begin{bmatrix} n-1 \\ m-1 \end{bmatrix}\)种方案;
  • 将该元素插入到任何一个现有的圆排列中,共有\((n-1) \begin{bmatrix} n-1 \\ m \end{bmatrix}\)种方案。

根据加法原理,将两式相加即可得到递推式。

性质

性质一:\(\begin{bmatrix}n\\1\end{bmatrix}=(n-1)!\)

性质二:\(\begin{bmatrix}n\\2\end{bmatrix}=(n-1)!\sum\limits_{i=1}^{n-1}\frac{1}{i}\),证明考虑归纳法。

性质三:\(\sum\limits_{i=0}^{n}\begin{bmatrix}n\\i\end{bmatrix}=n!\)

第二类斯特林数

第二类斯特林数 (斯特林子集数)\(\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]\)

还是考虑组合意义来证明。

我们插入一个新元素时,有两种方案:

  • 将新元素单独放入一个子集,有\(\begin{Bmatrix} n-1 \\ m-1 \end{Bmatrix}\)种方案;
  • 将新元素放入一个现有的非空子集,有\(m \begin{Bmatrix} n-1 \\ m \end{Bmatrix}\)种方案。

根据加法原理,将两式相加即可得到递推式。

应用

上升幂与普通幂的相互转化

我们记上升阶乘幂\(x^{\overline{n}} = \prod\limits_{k=0}^{n-1} (x+k)\)

则可以利用下面的恒等式将上升幂转化为普通幂:

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

得到\(x^{\overline{n}}\)\(k\)次项系数即为\(\begin{bmatrix} n \\ k \end{bmatrix}\)

如果将普通幂转化为上升幂,则有下面的恒等式:

\[x^n = \sum_{k} \begin{Bmatrix} n \\ k \end{Bmatrix} (-1)^{n-k} x^{\overline{k}} \]

下降幂与普通幂的相互转化

我们记下降阶乘幂\(x^{\underline{n}} = \frac {x!} {(x-n)!} = \prod_{k=0}^{n-1} (x-k)\)

则可以利用下面的恒等式将普通幂转化为下降幂:

\[x^n = \sum_{k} \begin{Bmatrix} n \\ k \end{Bmatrix} x^{\underline{k}} \]

如果将下降幂转化为普通幂,则有下面的恒等式:

\[x^{\underline{n}} = \sum_{k} \begin{bmatrix} n \\ k \end{bmatrix} (-1)^{n-k} x^{k} \]

斯特林反演

一般形式:

\[[m=n] = \sum_{k=m}^{n} (-1)^{n-k} \begin{bmatrix} n \\ k \end{bmatrix} \begin{Bmatrix} k \\ m \end{Bmatrix} \]

\[[m=n] = \sum_{k=m}^{n} (-1)^{n-k} \begin{Bmatrix} n \\ k \end{Bmatrix} \begin{bmatrix} k \\ m \end{bmatrix} \]

例题:方阵

给出一个\(n \times m\)大小的矩形,每个位置可以填上\([1,c]\)中的任意一个数,要求填好后任意两行互不等价且任意两列互不等价,两行或两列等价当且仅当对应位置完全相同,求方案数 。\(n,m \leq 5000\)

(https://vjudge.net/problem/TopCoder-13444)

对这种行列都有限制的题我们可以先只考虑一边。

先只考虑让行之间互不等价,一个\(n\)\(m\)列且行互不等价的矩形的方案数为\((c^m)^{\underline{n}}\)

我们设\(f(m)\)表示行互不等价的情况下,\(m\)列的矩形的方案数。\(f(m) = (c^m)^{\underline{n}}\)

我们设\(g(m)\)表示行和列都分别互不等价的情况下,\(m\)列的矩形的方案数,也就是我们要的答案。

\[f(m) = \sum_{i=0}^{m} \begin{Bmatrix} m \\ i \end{Bmatrix}g(i) \]

这个式子的意义就是我们枚举\(m\)列分成了\(i\)个互不等价的集合,再将这\(m\)列分配到这些集合中去。

由斯特林反演,

\[g(m) = \sum_{i=0}^m (-1)^{m-i} \begin{bmatrix} m \\ i \end{bmatrix} f(i) \]

考虑证明,将\(f(i)\)的形式代入式子中,

\[\begin{align} g(m) & = \sum_{i=0}^m (-1)^{m-i} \begin{bmatrix} m \\ i \end{bmatrix} f(i) \\ & = \sum_{i=0}^m (-1)^{m-i} \begin{bmatrix} m \\ i \end{bmatrix} \sum_{j=0}^i \begin{Bmatrix} i \\ j \end{Bmatrix} g(j) \\ & = \sum_{j=0}^m \sum_{i=j}^m (-1)^{m-i} \begin{bmatrix} m \\ i \end{bmatrix} \begin{Bmatrix} i \\ j \end{Bmatrix} g(j) \\ & = \sum_{j=0}^m [j=m] g(j) \\ & = g(m) \end{align} \]

于是,我们就可以\(O(n^2)\)解决这个问题。

posted @ 2022-01-27 14:32  tianyy  阅读(159)  评论(0)    收藏  举报