Stirling数小记
定义/组合意义
第一类斯特林数:[nm]表示n个不同元素分为m个圆排列的方案数
有标号的第一类斯特林数s(n,m)=(−1)n−m[nm]
第二类斯特林数:{nm}表示n个不同元素分为m个集合的方案数
注意圆排列和集合都是相互之间无序的
递推方法
第一类斯特林数
[nm]=[n−1m−1]+(n−1)[n−1m]
即新建一个圆排列,或者插入前面n−1个元素中任意一个的后面
显然的,有标号的第一类斯特林数递推式就是
[nm]=[n−1m−1]−(n−1)[n−1m]
第二类斯特林数
{nm}={n−1m−1}+m{n−1m}
即新建一个集合,或者加入前面的m个集合
第二类斯特林数的通项公式
{nm}=1m!∞∑i=0(−1)m−i(mi)in
其组合意义是枚举生成了多少个有序的集合,然后容斥,最后除去集合的顺序
生成函数表示与行/列求解
固定n,以m为形式幂指数,则第一类斯特林数的普通生成函数
OGF=n−1∏i=0(x+i)=x¯¯¯n
(其意义就是上面的递推公式)
倍增+卷积二项展开求出F(x+i)即可做到O(nlogn)求出一行
固定m,以n为形式幂指数,则第一类斯特林数的指数型生成函数
EGF=1m!⋅(∞∑i=1(i−1)!i!xi)m=1m!⋅(∞∑i=1xii)m
设F(x)=∑∞i=1xii
∵F′(x)=∞∑i=1xi−1=11−x
∴F(x)=∫11−x=−ln(1−x)
∴EGF=1m!⋅(−ln(1−x))m=1m!⋅(−1)m⋅lnm(1−x)
(就是百度百科上的那个,它什么都没讲清楚)
多项式快速幂即可做到O(nlogn−nlog2n)求一列
而在上式的推导过程中额外加入(−1)m的常数,并且把xi换成(−x)i可以得到有标号第一类斯特林数的指数型生成函数
EGF=1m!⋅(∞∑i=1(−x)ii)m=1m!⋅lnm(1+x)
第二类斯特林数的一行可以直接由通项公式做卷积得到
固定m,以n为形式幂指数,则第二类斯特林数的指数型生成函数表示为
EGF=1m!(∞∑i=1xii!)m=1m!(ex−1)m=1m!m∑i=0(−1)m−1(mi)eix
实际上由这个二项展开的形式也可以发现,它就是上面通项公式的生成函数推导
可以求一列,复杂度为O(nlogn−nlog2n)常数很大
虽然没什么意义,但是还是写一下二元形式
第一类斯特林数:
EGF=e−ln(1−x)y
第二类斯特林数:
EGF=e(ex−1)y
注意元x为指数型,y是普通型
斯特林数与幂指数/上升幂/下降幂
第一类斯特林数:
上面已经说过x¯¯¯n=n∑i=0[ni]xi
同理,用有标号的第一类斯特林数将xn––展开的式子是
xn––=n∑i=0(−1)n−i[ni]xi
第二类斯特林数:
类似通项公式的求解,组合意义将幂指数展开,视xn为将n个元素随意放在x个位置,则枚举x个位置中那些被选择
xn=n∑i=0(xi)i!{ni}
把(xi)i!写成下降幂的形式,得到优美的式子
xn=n∑i=0{ni}xi–
而实际上由上式二项反演也可以得到通项公式
{nm}=1m!∞∑i=0(−1)m−i(mi)in
关于下降幂多项式的快速转化,可以再借鉴这个
斯特林变换/斯特林反演
对于斯特林变换
an=n∑i=0{ni}bi
设A(x),B(x)为数列a,b的指数型生成函数,带入前文推导的式子,则得到上式的生成函数表达就是
A(x)=B(ex−1)
显然得到B(x)=A(ln(x+1)),而ln(x+1)显然转化为有标号的第一类斯特林数
因此得到斯特林反演的表达形式是
bn=n∑i=0(−1)n−i[ni]ai
(不大可能搞类似多项式复合的方法处理这个反演吧,最多可能也就是求一个位置)