[学习笔记] 斯特林数与斯特林反演

第一类斯特林数

第一类斯特林数一般记为 \(\begin{bmatrix} \ n \ \\ \ k \ \end{bmatrix}\),其组合意义为将 \(n\) 个不同元素分为 \(k\) 个相同圆排列的方案数。有递推式:

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

其组合意义显然,考虑当前的第 \(n\) 个元素,那么有两种情况:单独成为一个环,或者插入原先已有的某个圆排列中。相加即为答案。

性质

以下给出关于第一类斯特林数较为重要的几条性质:

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

显然。

\[n! = \sum\limits_{i=0}^n \begin{bmatrix} \ n \ \\ \ i \ \end{bmatrix} \]

考察组合意义,这相当于枚举了所有置换,因此显然成立。

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

考虑归纳:

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

这就完成了证明。

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

归纳同理可证。这几个式子揭示了上升、下降幂与斯特林数的联系,上升、下降幂转普通幂在 OI 也有很多应用,在这里就不具体举例了。

第一类斯特林数-行

考虑第一类斯特林数的生成函数:

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

\(F_n(x) = \prod_{i=0}^{n-1} (x+i)\),则 \(F_{2n}(x) = F_n(x) F_n(x+n)\)。倍增处理,假设已经算出 \(F_n(n)\),那么:

\[\begin{aligned} F_n(x+n) &= \prod_{i=0}^{n-1}(x+n+i) \\ &= \sum_{i=0}^n \begin{bmatrix} \ n \ \\ \ i \ \end{bmatrix} (x+n)^i \\ &= \sum_{i=0}^n \begin{bmatrix} \ n \ \\ \ i \ \end{bmatrix} \sum_{j=0}^i \binom{i}{j} x^j n^{i-j} \\ &= \sum_{j=0}^n \frac{x^j}{j!} \sum_{i=j}^n \begin{bmatrix} \ n \ \\ \ i \ \end{bmatrix} i! \frac{n^{i-j}}{(i-j)!} \end{aligned} \]

后半部分是卷积的形式,NTT 算即可,最后把系数乘上 \(\frac{1}{j!}\) 就能得到 \(F_n(x+n)\),再和 \(F_n(x)\) 相乘即可算出 \(F_{2n}(x)\)。时间复杂度 \(T(n) = T(\frac{n}{2}) + O(n \log n) = O(n \log n)\)

第一类斯特林数-列

考虑将 \(n\) 个元素放进一个圆排列的 EGF:

\[\sum_{n>0} (n-1)! \frac{1}{n!} x^n = \sum_{n>0} \frac{x^n}{n} \]

那么放进 \(m\) 个无序的圆排列无非就是:

\[\frac{1}{m!} \left( \sum_{n>0} \frac{x^n}{n} \right)^m \]

多项式快速幂即可。时间复杂度 \(O(n \log n)\)

第二类斯特林数

第一类斯特林数一般记为 \(\begin{Bmatrix} \ n \ \\ \ k \ \end{Bmatrix}\),其组合意义为将 \(n\) 个不同元素分为 \(k\) 个非空集合的方案数。有递推式:

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

同样分两种情况讨论即可。

性质

以下给出关于第二类斯特林数较为重要的几条性质:

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

等式右边是对空集合的数量容斥,枚举有 \(i\) 个集合为空,剩下随便放。

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

考虑组合意义,左边相当于将 \(k\) 个小球放入 \(n\) 个盒子内,但可能存在空盒子;右边相当于枚举有多少个盒子非空,再把所有情况相加,显然两者相等。或者对第一个式子进行二项式反演,也可以得到同样的结果。

通过这个式子,我们可以用来求解自然数幂和:

\[\begin{aligned} S_k(n) &= \sum_{i=1}^n i^k \\ &= \sum_{i=1}^n \sum_{j=0}^i \begin{Bmatrix} \ k \ \\ \ j \ \end{Bmatrix} j! \binom{i}{j} \\ &= \sum_{j=0}^k \begin{Bmatrix} \ k \ \\ \ j \ \end{Bmatrix} j! \sum_{i=0}^n \binom{i}{j} \\ &= \sum_{j=0}^k \begin{Bmatrix} \ k \ \\ \ j \ \end{Bmatrix} j! \binom{n+1}{j+1} \end{aligned} \]

若暴力递推第二类斯特林数,时间复杂度为 \(O(k^2)\)。不过也可以按照下面的方法快速求出第二类斯特林数的一行,这样时间复杂度为 \(O(k \log k)\)

第二类斯特林数-行

借助第二类斯特林数的通项:

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

显然这是一个卷积的形式,NTT 算即可,时间复杂度 \(O(k \log k)\)

第二类斯特林数-列

同样考虑组合意义,把相同的集合换成不同的盒子,那么会使每一项乘上 \(k!\),所以最后把题目转化后的答案除以 \(k!\) 就是最终的答案。设把相同集合换成不同盒子的 EGF 为 \(F\),单个盒子的 EGF 为 \(G\),则 \(F^k = G\)

由于每个盒子不能为空,则每个盒子的 EGF 为:

\[G = \sum_{i > 1} \frac{x^i}{i!} = e^x - 1 \]

\(F = (e^x - 1)^k\)。多项式快速幂即可,时间复杂度 \(O(n \log n)\)

斯特林反演

形式和二项式反演有些类似:

\[f_n = \sum_{i=0}^n \begin{Bmatrix} \ n \ \\ \ i \ \end{Bmatrix} g_i \Leftrightarrow g_n = \sum_{i=0}^n (-1)^{n-i} \begin{bmatrix} \ n \ \\ \ i \ \end{bmatrix} f_i \]

证明斯特林反演首先需要知道一个叫做反转公式的东西:

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

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

然后还需要知道上升阶乘幂和下降阶乘幂之间的关系:

\[x^{\underline{n}} = (-1)^n (-x)^{\overline{n}} \]

\[x^{\overline{n}} = (-1)^n (-x)^{\underline{n}} \]

对第一个反转公式的证明:

\[\begin{aligned} x^{\underline{n}} &= \sum\limits_{i=0}^n (-1)^{n-i} \begin{bmatrix} \ n \ \\ \ i \ \end{bmatrix} x^i \\ &= \sum\limits_{i=0}^n (-1)^{n-i} \begin{bmatrix} \ n \ \\ \ i \ \end{bmatrix} \sum_{j=0}^i \binom{x}{j} \begin{Bmatrix} \ i \ \\ \ j \ \end{Bmatrix} j! \\ &= \sum_{j=0}^n x^{\underline{j}} \sum_{i=j}^n (-1)^{n-i} \begin{bmatrix} \ n \ \\ \ i \ \end{bmatrix} \begin{Bmatrix} \ i \ \\ \ j \ \end{Bmatrix} \end{aligned} \]

显然我们不可能通过更小的若干个 \(x^{\underline{j}}\) 凑出 \(x^{\underline{n}}\)$,因此只有当 \(j=n\) 时后半部分为 \(1\)

对第二个反转公式的证明:

\[\begin{aligned} n^m &= \sum_{i=0}^m \sum_{i=0}^n \begin{Bmatrix} \ m \ \\ \ i \ \end{Bmatrix} i! \binom{n}{i} \\ &= \sum_{i=0}^m \sum_{i=0}^n \begin{Bmatrix} \ m \ \\ \ i \ \end{Bmatrix} n^{\underline{i}} \\ &= \sum_{i=0}^m \sum_{i=0}^n \begin{Bmatrix} \ m \ \\ \ i \ \end{Bmatrix} (-1)^i (-n)^{\overline{i}} \\ &= \sum_{i=0}^m \sum_{i=0}^n \begin{Bmatrix} \ m \ \\ \ i \ \end{Bmatrix} (-1)^i \sum_{j=0}^i \begin{bmatrix} \ i \ \\ \ j \ \end{bmatrix} (-n)^j \\ &= \sum_{j=0}^m n^j \sum_{i=j}^m \begin{Bmatrix} \ m \ \\ \ i \ \end{Bmatrix} \begin{bmatrix} \ i \ \\ \ j \ \end{bmatrix} (-1)^{i-j}\\ \end{aligned} \]

显然只有当 \(j=m\) 时后半部分为 \(1\),这就完成了证明。

接下来我们证明斯特林反演:

假如有:

\[f_n = \sum_{i=0}^n \begin{Bmatrix} \ n \ \\ \ i \ \end{Bmatrix} g_i \]

那么:

\[\begin{aligned} g_n &= \sum_{i=0}^n [i=n]g_i \\ &= \sum_{i=0}^n \sum_{j=i}^n (-1)^{n-j} \begin{bmatrix} \ n \ \\ \ j \ \end{bmatrix} \begin{Bmatrix} \ j \ \\ \ i \ \end{Bmatrix} g_i \\ &= \sum_{j=0}^n (-1)^{n-j} \begin{bmatrix} \ n \ \\ \ j \ \end{bmatrix} \sum_{i=0}^j \begin{Bmatrix} \ j \ \\ \ i \ \end{Bmatrix} g_i \\ &= \sum_{j=0}^n (-1)^{n-j} \begin{bmatrix} \ n \ \\ \ j \ \end{bmatrix} f_j \end{aligned} \]

假如有:

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

那么:

\[\begin{aligned} f_n &= \sum_{i=0}^n [i=n] f_i \\ &= \sum_{i=0}^n \sum_{j=i}^n (-1)^{j-i} \begin{Bmatrix} \ n \ \\ \ j \ \end{Bmatrix} \begin{bmatrix} \ j \ \\ \ i \ \end{bmatrix} f_i \\ &= \sum_{j=0}^n \begin{Bmatrix} \ n \ \\ \ j \ \end{Bmatrix} \sum_{i=0}^j (-1)^{j-i} \begin{bmatrix} \ j \ \\ \ i \ \end{bmatrix} f_i \\ &= \sum_{i=0}^n \begin{Bmatrix} \ n \ \\ \ i \ \end{Bmatrix} g_i \end{aligned} \]

这就完成了证明。

斯特林反演还有另一种类似的形式:

\[f_i = \sum_{j=i}^n \begin{Bmatrix} \ j \ \\ \ i \ \end{Bmatrix} g_j \Leftrightarrow g_i = \sum_{j=i}^n (-1)^{j-i} \begin{bmatrix} \ j \ \\ \ i \ \end{bmatrix} f_j \]

通过反转公式同样容易证明。

普通幂与上升、下降幂的转换

不用怀疑,你确实已经见过他们了。不过因为他们确实很重要,所以在这里单独列出。

\[\begin{aligned} x^n &= \sum_{i=0}^n \binom{x}{i} i! \begin{Bmatrix} \ n \ \\ \ i \ \end{Bmatrix} = \sum_{i=0}^n \begin{Bmatrix} \ n \ \\ \ i \ \end{Bmatrix} x^{\underline{i}} \\ x^n &= \sum_{i=0}^n (-1)^{n-i} \begin{Bmatrix} \ n \ \\ \ i \ \end{Bmatrix} x^{\overline{i}} \\ x^{\overline{n}} &= \sum_{i=0}^n \begin{bmatrix} \ n \ \\ \ i \ \end{bmatrix} x^i \\ x^{\underline{n}} &= \sum_{i=0}^n (-1)^{n-i} \begin{bmatrix} \ n \ \\ \ i \ \end{bmatrix} x^i \end{aligned} \]

总结一下,普通转上升/下降时用第二类,上升/下降转普通时用第一类。这也许和斯特林数的定义有关,小编也感到非常惊讶。

posted @ 2022-07-23 14:41  came11ia  阅读(439)  评论(0编辑  收藏  举报