第一类斯特林数
将 \(n\) 个不同的小球组成 \(m\) 个项链的方案数,计做 \(\begin{bmatrix} n\\m \end{bmatrix}\)。这就是(无符号)第一类斯特林数。
第一类斯特林数有一个很显然的递推式:
\[\begin{bmatrix} n\\m \end{bmatrix}=\begin{bmatrix} n-1\\m-1 \end{bmatrix}+\begin{bmatrix} n-1\\m \end{bmatrix}\cdot(n-1)
\]
枚举两种情况,第一种是新开辟一个环,第二种是接在已经有的点的后面。
性质
性质1
\[n!=\sum_{i=0}^n \begin{bmatrix} n\\i \end{bmatrix}
\]
可以从置换的角度理解。左边是所有可能的置换的数量,右边有在枚举 \(n\) 个数分成 \(i\) 个循环的方案数之和。两者显然相等。
性质2
定义 \(x^{\overline n}\) 表示 \(\prod\limits_{i=0}^{n-1} x-i\),\(x^{\underline n}\) 表示 \(\prod\limits_{i=0}^{n-1} x+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
\]
证明考虑归纳法:
\[\begin{align*}
x^{\overline n} &= x^{\overline{n-1}} \cdot(x+n-1)\\
&= (\sum_{i=0}^{n-1} \begin{bmatrix} n-1\\i \end{bmatrix} x^i) \cdot (x+n-1)\\
&= \sum_{i=0}^n (\begin{bmatrix} n-1\\i \end{bmatrix}+\begin{bmatrix} n-1\\i-1 \end{bmatrix}\cdot (n-1)) x^i\\
&= \sum_{i=0}^n \begin{bmatrix} n\\i \end{bmatrix}x^i
\end{align*}
\]
第二个式子证明同理,把 \(-1\) 带进去归纳就可以了,不再赘述。
PS: \((-1)^{n-i}\begin{bmatrix} n\\i \end{bmatrix}\) 就是所谓的有符号第一类斯特林数。
性质3
\[\sum_{i=m}^n \begin{bmatrix} n\\i \end{bmatrix}\begin{Bmatrix} i\\m \end{Bmatrix}=\sum_{i=m}^n \begin{Bmatrix} n\\i \end{Bmatrix}\begin{bmatrix} i\\m \end{bmatrix}
\]
不会证。
如果有哪位神仙会证明的欢迎来联(diao)系(da)我。
求法
根据性质2,\(x^{\overline n}=\sum_{i=0}^n\begin{bmatrix} n\\i \end{bmatrix}x^i\)。
这个性质等价于对于多项式 \(x(x+1)(x+2)\cdots(x+n-1)\),\(\begin{bmatrix} n\\i \end{bmatrix}\) 是 \(x_i\) 的系数。
同时由于 \(x^{\overline{2k}}=x^{\overline k}(x+k)^{\overline k}\),我们可以发现,如果我们已经求出了 \(x^{\overline{k}}\) 的每一项的系数,\((x+k)^{\overline k}\) 的系数也很好求,我们就可以很轻松的扩展出 \(x^{\overline{2k}}\) 的每一项的系数。至于怎么求 \((x+k)^{\overline k}\) 的系数,如下:
令 \(F(x) = \sum\limits_{i=0}^k a_ix^i\),则
\[\begin{align*}
F(x+k)&=\sum_{i=0}^k a_i(x+k)^i\\
&=\sum_{i=0}^k a_i\sum_{j=0}^i\binom ij k^{i-j}x^j\\
&=\sum_{i=0}^k a_i\sum_{j=0}^i\frac{i!k^{i-j}x^j}{j!(i-j)!}\\
&=\sum_{j=0}^k (\frac{1}{j!}\sum_{i=j}^k\frac{a_ii!k^{i-j}}{(i-j)!})x^j
\end{align*}
\]
上面的式子系数可以通过 FFT 求出来。然后求出来系数以后再做一遍 FFT 把 \(F(x) F(x+k)\) 求出来就可以了。
每一次串的长度都被倍长,类似于多项式求逆的复杂度分析,总的时间复杂度为 \(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}+\begin{Bmatrix}n-1\\k \end{Bmatrix}\cdot k
\]
转移是考虑将这个小球放进一个新的盒子,还是放到原来有的 \(k\) 个盒子中的。
求法
如果我们需要求出所有的 \(S(n, i)\),这样直接递推是 \(O(n^2)\) 的。但是结合二项式反演,我们可以 \(O(n\log n)\) 求出所有的 \(S(n, i)\)。
既然第二类斯特林数要求盒子不能为空,那么我们就可以很容易的得到一个这样的等式。
\[k^n = \sum_{i=0}^k i! \binom ki \begin{Bmatrix}n\\i\end{Bmatrix}
\]
左边表示把 \(n\) 个不同小球放进 \(k\) 个不同的盒子,且可以为空,右边的话,就是先枚举有哪些盒子是不为空的,然后用斯特林数求一下方案数,乘上从 \(k\) 个盒子中选择 \(i\) 个数组合起来的方案数;但是这样求出来的相同的盒子的方案,因此还需要乘上 \(i!\)。
我们令 \(f(k) = k^n\),\(g(k)=k!\begin{Bmatrix}n\\k \end{Bmatrix}\)。根据上面的结论,有
\[f(k) = \sum_{i=0}^k \binom ki g(i)
\]
那么直接二项式反演
\[g(k)=\sum_{i=0}^k(-1)^{k-i}\binom ki f(i)\\k!\begin{Bmatrix}n\\k \end{Bmatrix}=\sum_{i=0}^k (-1)^{k-i}\binom kii^n\\\begin{align*}\begin{Bmatrix}n\\k \end{Bmatrix} &= \frac 1{k!}\sum_{i=0}^k (-1)^{k-i}\binom kii^n\\&= \frac 1{k!}\sum_{i=0}^k \frac {(-1)^{k-i}k!i^n}{i!(k-i)!}\\&= \sum_{i=0}^k \frac {(-1)^{k-i}i^n}{i!(k-i)!}\end{align*}
\]
我们令 \(A_i = \frac{i^n}{i!}\),\(B_i = \frac{(-1)^i}{i!}\)。用 FFT 将 \(A\) 和 \(B\) 做卷积就可以了。
性质1
就是在上面的求法中,我们已经有了一个性质了:
\[k^n = \sum_{i=0}^k i! \binom ki \begin{Bmatrix}n\\i\end{Bmatrix}
\]
这个式子可以写成
\[k^n=\sum_{i=0}^k\begin{Bmatrix}n\\i\end{Bmatrix} k^{\underline i}
\]
由于当 \(n > k\) 时,\(k^{\underline i}=0\) ,所以上式可以等价写成
\[k^n = \sum_{i=0}^n i! \binom ki \begin{Bmatrix}n\\i\end{Bmatrix}=\sum_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix} k^{\underline i}
\]
性质1 推论1
\[\sum_{i=0}^m i^n = \sum_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}i!\binom{m+1}{i+1}
\]
证明:
\[\begin{align*}
\sum_{i=0}^m i^n &= \sum_{i=1}^m \sum_{j=0}^i j! \binom ij \begin{Bmatrix}n\\j\end{Bmatrix}\\
&= \sum_{j=0}^n \begin{Bmatrix}n\\j\end{Bmatrix}j!\sum_{i=j}^m\binom ij\\
&= \sum_{j=0}^n \begin{Bmatrix}n\\j\end{Bmatrix}j!\binom {m+1}{j+1}
\end{align*}
\]
性质1 推论2
\[\sum_{i=1}^m i^n\binom mi = \sum_{i=0}^n \begin{Bmatrix}n\\i\end{Bmatrix}i!\binom mi\cdot 2^{m-i}
\]
证明:
\[\begin{align*}
\sum_{i=1}^m i^n\binom mi &= \sum_{i=1}^m \binom mi \sum_{j=1}^i \binom ij \begin{Bmatrix}n\\j\end{Bmatrix} j!\\
&= \sum_{j=0}^n \begin{Bmatrix}n\\j\end{Bmatrix}j!\sum_{i=j}^m \binom mi \binom ij\\
&= \sum_{j=0}^n \begin{Bmatrix}n\\j\end{Bmatrix}j!\sum_{i=j}^m \binom mj \binom{m-j}{i-j}\\
&= \sum_{j=0}^n \begin{Bmatrix}n\\j\end{Bmatrix}j!\binom mj \sum_{i=j}^m \binom{m-j}{i-j}\\
&= \sum_{j=0}^n \begin{Bmatrix}n\\j\end{Bmatrix}j!\binom mj 2^{m-j}
\end{align*}
\]
斯特林反演
\[f(n)=\sum_{i=m}^n\begin{Bmatrix}n\\i\end{Bmatrix}g(i) \Longleftrightarrow g(n)=\sum_{i=m}^n (-1)^{n-i} \begin{bmatrix}n\\i\end{bmatrix}f(i)\\
f(n)=\sum_{i=n}^m\begin{Bmatrix}i\\n\end{Bmatrix}g(i) \Longleftrightarrow g(n)=\sum_{i=n}^m (-1)^{i-n} \begin{bmatrix}i\\n\end{bmatrix}f(i)
\]
为了证明这个反演,我们先来看个结论。
反转公式
\[\sum_{i=m} (-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\m\end{Bmatrix}=[m=n]\\
\sum_{i=m} (-1)^{n-i}\begin{Bmatrix}n\\i\end{Bmatrix}\begin{bmatrix}i\\m\end{bmatrix}=[m=n]
\]
证明如下:
证明——第一个式子
\[\begin{align*}
m^{\underline{n}}&=\sum_{i=0}^n (-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}m^i\\
&=\sum_{i=1}^m(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\sum_{j=0}^i\binom mj\begin{Bmatrix}i\\j\end{Bmatrix}j!\\
&=\sum_{j=0}^m\binom mjj!\sum_{i=j}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\j\end{Bmatrix}\\
&=\sum_{j=0}^mm^{\underline{j}}\sum_{i=j}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\j\end{Bmatrix}
\end{align*}
\]
显然 \(\sum\limits_{i=j}^m(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\j\end{Bmatrix}\) 只有在 \(j=m\) 的时候才为 \(1\),否则为 \(0\)。第一个公式得证。
证明——第二个式子
\[\begin{align*}
m^n&=\sum_{i=0}^m\begin{Bmatrix}n\\i\end{Bmatrix}m^{\underline i}\\
&=\sum_{i=0}^m\begin{Bmatrix}n\\i\end{Bmatrix}\sum_{j=0}^i(-1)^{i-j}\begin{bmatrix}i\\j\end{bmatrix}m^j\\
&=\sum_{j=0}^n m^j\sum_{i=j}^m(-1)^{i-j}\begin{Bmatrix}n\\i\end{Bmatrix}\begin{bmatrix}i\\j\end{bmatrix}
\end{align*}
\]
显然 \(\sum\limits_{i=j}^m(-1)^{i-j}\begin{Bmatrix}n\\i\end{Bmatrix}\begin{bmatrix}i\\j\end{bmatrix}\) 只有在 \(j=n\) 时才为 \(1\),否则为 \(0\)。第二个公式得证。
证明斯特林反演
直接带进去证明:
第一个形式
\[\begin{align*}
g(n)&=\sum_{i=m}^n (-1)^{n-i} \begin{bmatrix}n\\i\end{bmatrix}f(i)\\
&=\sum_{i=m}^n (-1)^{n-i} \begin{bmatrix}n\\i\end{bmatrix}\sum_{j=m}^i\begin{Bmatrix}i\\j\end{Bmatrix}g(j)\\
&=\sum_{j=m}^ng(j)\sum_{i=j}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\j\end{Bmatrix}
\end{align*}
\]
又由上面的结论可知,只有当 \(j=n\) 的时候 \(\sum\limits_{i=j}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\j\end{Bmatrix}\) 才为 \(1\),否则为 \(0\),所以证毕。
第二个形式
\[\begin{align*}
g(n)&=\sum_{i=n}^m (-1)^{i-n} \begin{bmatrix}i\\n\end{bmatrix}f(i)\\
&=\sum_{i=n}^m (-1)^{i-n} \begin{bmatrix}i\\n\end{bmatrix}\sum_{j=i}^m\begin{Bmatrix}j\\i\end{Bmatrix}g(j)\\
&=\sum_{j=n}^m g(j) \sum_{i=n}^j(-1)^{i-n}\begin{Bmatrix}j\\i\end{Bmatrix}\begin{bmatrix}i\\n\end{bmatrix}
\end{align*}
\]
又由上面的反转公式可知,\(\sum\limits_{i=m}^j(-1)^{i-n}\begin{Bmatrix}j\\i\end{Bmatrix}\begin{bmatrix}i\\n\end{bmatrix}\) 只有在 \(j=m\) 的时候才不为 \(0\),所以此形式得证。
参考资料
https://www.cnblogs.com/Emiya-wjk/p/10015753.html#autoid-2-4-0
https://www.cnblogs.com/hchhch233/p/10016543.html