第一类斯特林数
第一类斯特林数一般记为 \(\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}
\]
总结一下,普通转上升/下降时用第二类,上升/下降转普通时用第一类。这也许和斯特林数的定义有关,小编也感到非常惊讶。