由于看不懂你谷和OI Wiki上非常形而上学的知识,这里对Strling数进行主观的串线讲解。
前置知识:离散变换技巧,生成函数基础,指数生成函数
文尾附四个模板题(不包括转多项式)的做法。
定义
第二类斯特林数
{nm} 表示将m个有序元素分成n个无序非空集合的方案数。
第一类斯特林数
[nm] 表示将m个有序元素分为n个无序圆排列的方案数。
什么是圆排列?就是将一个排列围成一圈,我们知道排列的前提是n个本质不同(且有序)的元素组成一列的方案数,一般来说这个值是
n!。那么他们能组成多少种圆牌列,考虑取每个圆牌列的最小元素,以顺时针为正方向计数,每个圆牌列贡献n个计数,并且由于所有圆牌列本质不同(关于旋转循环群封闭,不包括立体翻转),所以有
(n−1)! 个圆牌列。
进而有如下组合意义递推式:
{nm}[nm]={n−1m−1}+m{n−1m}=[n−1m−1]+(n−1)[n−1m]
这里重点强调一下着为什么体现了集合的无序性,考虑有序的元素,每个元素新开集合直接确定了这个集合的特征(最大元素),并且所有集合特征不同,满足无序性。(如果有序,那么第一项需要乘系数m)
接下来我们考虑求出这东西的二重生成函数,形如
F(x,y)=∑n≥0m≥0f(n,m)xnym.
不妨先从一个简单的情况入手,先来考虑广义二项式系数
(mn) 作系数的情况。
F(x,y)∴F=n≥0m≥0∑(mn)znwm=n≥0m≥0∑(mn)znwm=n≥0m≥0∑(m−1n−1)znwm+n≥0m≥0∑(mn−1)znwm=wn≥0m≥0∑(mn−1)znwm+n≥0m≥0∑(mn−1)znwm=wzn,m≥0∑(mn)znwm+zn≥0m≥0∑(mn)znwm+(w+1)m≥0∑(m−1)wm=(wz+z)F+(w+1)(w+1)−1=z(1+w)F+1=1−z−zw1.
我们很顺利地求出了这个二重生成函数,注意我们仅仅使用了递推式。在本行后的内容将会充分发挥二重生成函数的威力。
但如果我们直接把这个方法平移到第二类斯特林数,会得到一个难解的方程,并得到一个非常复杂的解,为了避免这种情况,转而考虑另一种生成函数:
F(x,y)=∑n≥0m≥0f(n,m)xnym/n!. 它对二项式系数、斯特林数,甚至是欧拉数(Eulerian number)都有非常好的性质。
这主要要归功于
zn/n! 拥有关于z的
导数封闭性,使得一般可以得到关于z的简单偏微分方程,从而使封闭形式变得简单。至于为什么导数封闭性有用,请看下文。
首先尝试
n≥0m≥0∑{nm}n!xnym=n≥0m≥0∑{n−1m−1}n!xnym+n≥0m≥0∑m{n−1m}n!xnym={−1−1}+n≥0m≥0∑{nm}(n+1)!xn+1ym+1+n≥0m≥0∑m{nm}(n+1)!xn+1ym
等等,出现了向前移位的现象,这很不妙,这意味着我们需要考虑一个意义不明的项(实际为1)和一个看上去只能用积分来处理的式子,这将大大增加计算的复杂度。这时导数封闭性就派上用场了:我们先对原式求导,也不会改变原式的结构。
∂x∂F∴∂x∂F=n≥0m≥0∑{nm}(n−1)!xn−1ymable only when n>0=n≥0m≥0∑{n+1m}n!xnym=n≥0m≥0∑{nm−1}n!xnym+n≥0m≥0∑{nm}n!xnym=yn≥0m≥0∑{nm}n!xnym+y∂y∂F=yF+y∂y∂F=y(F+∂y∂F)
解方程,
F=e−yϕ(yex)。取
x=0,得到
ϕ(x)=ex。于是
F=ey(ex−1)。
沿用以上办法,我们得到四个异常重要的式子:
ez+wzew(ez−1)(1−z)w1e(w−1)z−w1−w=m,n≥0∑(mn)wmn!zn=m,n≥0∑{nm}wmn!zn=m,n≥0∑[nm]wmn!zn=m,n≥0∑⟨nm⟩wmn!zn
在本节,将使用
(2) (3) 式导出之后的几乎所有内容。
为了引出之后的内容,首先考虑一个组合意义,以第二类斯特林数为例,第二类斯特林数
{nm} 表示将m个有序元素分成n个无序非空集合的方案数,考虑让
n 个集合有序,对这个情况算两次处理。
考虑指数生成函数及其卷积的组合意义,构造
(ez−1)n 表示
n 个盒子,每个盒子可以放任意多个(非空)个元素的EGF,符合将 任意
m 多个元素放进
n 个盒子的情境。
同理,根据单个圆排列的方案数生成其指数生成函数再进行卷积,符合第一类斯特林数的对应情境。
于是有:
n!m≥0∑{mn}m!zmn!m≥0∑[mn]m!zm=(ez−1)n=(ln1−z1)n
我们尝试不用组合意义,只从代数角度来考虑导出这两个式子。你已经猜到了要用什么,没错就是
(2) (3) 式。
(1−z)−w[wm](1−z)−wLHS∴(ln1−z1)m=m,n≥0∑[mn]wmn!zn=n≥0∑[mn]n!zn=[wm]ewln(1−z1)=[wm]i≥0∑i!(wln(1−z1))i=m!(ln1−z1)m=m!n≥0∑[mn]n!zn
易如反掌。
接下来我们考虑那个屡见不鲜的式子:上升/下降幂和普通幂的转化式,用归纳法快速证明的背后,你是否也知晓它的由来,下面让我们接着提取
zn ,导出这两个式子。
以第二类斯特林数为例。
ew(ez−1)[zn]ew(ez−1)LHS∴m≥0∑{nm}n!wm(ew)(m≥0∑{nm}wm)m≥0∑k≥0∑{nk}(m−k)!1wmk≥0∑{nk}(m−k)!1mn=m≥0n≥0∑{nm}wmn!zn=m≥0∑{nm}n!wm=[zn]ewewez=ew1[zn]i≥0∑i!(wez)i=ew1[zn]i≥0∑i!wieiz=ew1[zn]i≥0∑i!wij≥0∑j!(iz)j=ew1[zn]j≥0∑j!zji≥0∑i!wiij=ew1n!1i≥0∑i!wiin=ew1n!1i≥0∑i!wiin=i≥0∑i!wiin=i≥0∑i!wiin=m!mn=k≥0∑{nk}mk
incredible result! 这样我们就得到了这个经典的式子。
同理,我们也可以得到
mn=∑k≥0[nk]mk。这样就完成了有关斯特林数的基本恒等式的证明。