学习笔记 - 斯特林反演

第一类斯特林数

\(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

posted @ 2019-09-11 19:53  hankeke303  阅读(627)  评论(0编辑  收藏  举报