Loading [MathJax]/jax/output/HTML-CSS/jax.js

斯特林反演

引入

关于斯特林数的定义可以上百度搜…这部分很简单就没写了。

本文中,s1(n,k)表示第一类斯特林数,s2(n,k)表示第二类。

这里不加说明的给出递推式:

s1(n,k)=(n1)s1(n1,k)+s1(n1,k1)s2(n,k)=ks2(n1,k)+s2(n1,k1)

卷积求第二类斯特林数

首先有一个组合意义很明显的式子:

nk=ki=0s2(k,i)(ni)i!

就是说k个位置填n种颜色,我们可以分成若干组,每组颜色不同。

我们可以把后面的值为0的项补全:

nk=ni=0s2(k,i)(ni)i!

对其进行二项式反演:

s2(k,n)n!=ni=0(1)ni(ni)ik

这个可以写成卷积形式,顺便把变量换下:

s2(n,k)=ki=0(1)ki(ki)!ini!

阶乘幂

阶乘幂的定义是这样的:

上升幂:x¯n=ni=1(x+i1)

下降幂:xn_=ni=1(xi+1)

显然可以根据组合数的定义得到:

xn_=(xn)n!

还有两个这样的式子:

x¯n=(1)n(x)n_xn_=(1)n(x)¯n

把右边拆开就能证明了。

阶乘幂与斯特林数的转化

所以上面卷积的第一个式子可以写成这样:

nk=ki=0s2(k,i)(ni)i!=ki=0s2(k,i)ni_

还有一个第一类斯特林数和上升幂的关系

x¯n=ni=0s1(n,i)xi

可以通过数学归纳来证明:

x¯n=(x+n1)n1i=0s1(n1,i)xi=n1i=0s1(n1,i)xi+1+n1i=0(n1)s1(n1,i)xi=ni=1s1(n1,i1)xi+n1i=1(n1)s1(n1,i)xi=ni=1(s1(n1,i1)+(n1)s1(n1,i))xi=ni=0s1(n,i)xi

注意由于s1(n,0)=s1(n,n+1)=0,所以中间边界条件其实不需要在意。

我们把这个式子变一下可以得到一个第一类斯特林数和下降幂的关系

x¯n=ni=0s1(n,i)xi(1)n(x)¯n=(1)nni=0s1(n,i)xi(1)ixn_=ni=0(1)nis1(n,i)xi

最上面那个普通幂转第二类斯特林数和上升幂的式子也可以类似的变一下:

xn=ni=0s2(n,i)xi_(1)n(x)n=(1)nni=0s2(n,i)(x)i_(1)n(x)n=(1)nni=0s2(n,i)x¯i(1)ixn=ni=0(1)nis2(n,i)x¯i

总结一下一共四个转化的式子:

xn=ni=0s2(n,i)xi_xn=ni=0(1)nis2(n,i)x¯ixn_=ni=0(1)nis1(n,i)xix¯n=ni=0s1(n,i)xi

反转公式

首先搬出下降幂的公式:

xn=ni=0s2(n,i)xi_

套上面的公式变成上升幂:

xn=ni=0s2(n,i)(1)i(x)¯i

套上升幂转第一类斯特林数的公式:

xn=ni=0s2(n,i)(1)iij=0s1(i,j)(x)j

x的幂提前,换一下求和符号:

xn=nj=0xjni=js2(n,i)s1(i,j)(1)ij

由于这里我们把x看成未知量,其他的都是已知量,所以我们可以把左右当作多项式,那么对比系数可得:

ni=ms2(n,i)s1(i,m)(1)im=[m=n]

这个叫做反转公式。

同理我们可以类似的得出第二个反转公式:

ni=ms1(n,i)s2(i,m)(1)im=[m=n]

注意:反转公式1的指数也可以写成ni,稍加分析可以发现m=n时成立,mn时有两种情况,一种不变,另一种会将答案取相反数,但是由于结果为0所以不影响。

斯特林反演

这里先给出反演的式子在加以证明:

f(n)=ni=0s2(n,i)g(i)g(n)=ni=0(1)nis1(n,i)f(i)

考虑一般反演的套路,先写出一个[i=n]的形式:

g(n)=ni=0[i=n]g(i)

在把和斯特林数以及[m=n]的式子套进去,也就是上面的反转公式(注意1的指数):

g(n)=ni=0g(i)nj=i(1)njs1(n,j)s2(j,i)=nj=0(1)njs1(n,j)ji=0s2(j,i)g(i)=ni=0(1)nis1(n,i)f(i)

证毕。

当然由于反转公式的对称性,所以互换s1,s2依然成立。