Loading

斯特林数

Stirling Number

第一类斯特林数

定义

表示将 \(n\) 个不同元素构成 \(k\) 个圆排列的数目,记为 \(\begin{bmatrix}n\\k\end{bmatrix}\)

其中,圆排列的定义是由若干个元素构成的环形排列,对于两个排列,如果他们能够互相通过旋转得到那么认为他们是等价的。

递推式

​我们可以发现,这个可以用 dp 来做,递推式为

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

证明是平凡的,考虑新的元素是否自己形成新的圆排列还是插入之前的排列,注意到圆排列的性质,因此只有 \(n-1\) 个位置可供插入。

特别的,\(\begin{bmatrix}n\\n\end{bmatrix}=1,n\ge 0\)\(\begin{bmatrix}n\\0\end{bmatrix}=0,n\ge 1\)

与多项式的结合

最常见的是同一行,即 \(n\) 相同的斯特林数计算,不妨设多项式

\[F_n(x)=\sum_{i=0}^n\begin{bmatrix}n\\k\end{bmatrix}x^i \]

根据递推式有

\[F_n(x)=(n-1)F_{n-1}(x)+xF_{n-1}(x) \]

于是有

\[F_n(x)=\prod_{i=0}^{n-1}(x+i) \]

其实就是每一次考虑选择 \(x\) 还是 \(i\)。对着这个分治 NTT 可以做到两个 \(\log\),但是这个东西其实是 \(x\) 的上升幂,记作 \(x^{\overline{n}}\),利用这个方面知识可以做到一个 \(\log\),这个以后再多项式那部分写一写吧,但是需要记住上升幂的定义,后面还会提到。

第二类斯特林数

定义

\(n\) 个元素构成 \(k\) 个不区分的子集的方案数(不允许空子集),记为 \(\begin{Bmatrix}n\\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} \]

证明和第一类斯特林数一模一样。

通项公式

从证明思考,令 \(g_n(k)\) 表示允许空子集的情况下,子集有编号情况下答案,令 \(f_n(k)\) 表示不允许空子集的情况下的答案。则:

\[\begin{Bmatrix}n\\k\end{Bmatrix} = \dfrac{f_n(k)}{k!} \]

考虑对于 \(g\) 的计算,这个是容易的。每个数都有 \(k\) 种选择,答案为 \(k^n\),考虑 \(f,g\) 的关系。

\[g_n(k)=\sum_{i=0}^k\binom{k}{i}f_n(i) \]

二项式反演一下就有

\[\begin{aligned} f_n(k)&=\sum_{i=0}^k(-1)^{k-i}\binom{k}{i}g_n(i)\\ &=\sum_{i=0}^k\dfrac{k!i^n(-1)^{k-i}}{i!(k-i)!} \end{aligned} \]

最后乘上 \(\dfrac{1}{k!}\)

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

与多项式结合

上面的式子非常容易看出是卷积的形式,甚至不用凑,因此对于同一行的第二类斯特林数直接卷积即可快速得到。

简单应用

这部分是比较重点的,感觉补这一个就是为了这里。

上升幂和下降幂的转化

这个最简单,根据定义就可以得到 \(x^{\overline{n}}=(x+n-1)^{\underline{n}}\)

但其实还有一个有趣的式子,为 \(x^{\overline{n}}=(-1)^n(-x)^{\underline{n}}\),这两个反过来写也可以。

上升幂 / 下降幂和普通幂的转化

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

还在思考如何证明?回看一下上面的第一类斯特林数和多项式的结合,会发现其实就是反过来了而已,严谨一点利用归纳也可以反过来推回去。

对于前面的上升幂转化一下就会得到

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

\(x=-x\),就会得到

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

现在还剩普通幂转成下降幂和上升幂,有

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

这个好像不好直接证明,但是其实答案上面也写过了:

\[g_n(k)=\sum_{i=0}^k\binom{k}{i}f_n(i) \]

带入 \(g_n(k)=k^n,k!\begin{Bmatrix}n\\k\end{Bmatrix} = f_n(k)\),得到:

\[x^n=\sum_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}\binom{x}{i}i! \]

注意到后面那部分就是 \(x^{\underline{i}}\)。同样,用 \(x^{\overline{n}}=(-1)^n(-x)^{\underline{n}}\) 替换一下 \(x^{\underline{i}}\) 可以得到最后一个式子

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

可算是写完了,琢磨了一个下午。

posted @ 2022-04-08 21:56  Jryno1  阅读(31)  评论(0)    收藏  举报  来源