第二类 Stirling 数学习小结

学习《组合数学》慕课课程的时候学到第二类 Stirling 数,慕课中讲得比较浅尝辄止;网上查了一圈,感觉没有对它的性质描述特别全面的资料。权当是写一份考试复习资料,写篇文章整理一下。

第二类 Stirling 数

定义

球盒模型

球盒模型可能是最简单朴素的定义方式之一,网上找到的也大多是这个定义。按此定义,第二类 Stirling 数 S(n,m) 表示将 n有区别的小球放入 m无区别的盒子(不允许空盒)的方案数。

下降幂

另外一种比较具有组合意义的定义方式是利用下降幂(Falling Factorial)。xn 次下降幂记作 xn[x]n,定义为

(1)xn[x]nx(x1)(x2)(xn+1)

边界值 [x]0=1

第二类 Stirling 数指出如何用一系列 [x]k 表出 xn,即:

(2)xn=S(n,0)[x]0+S(n,1)[x]1++S(n,n)[x]n=k=0nS(n,k)[x]k

相对而言,使用下降幂的定义才是真正的第二类 Stirling 数的定义。从它的名字就可以看出,由于有第二类 Stirling 数,就必然有第一类 Stirling 数,而这两类 Stirling 数一正一反地揭示了下降幂和普通代数幂之间的关系。事实上,{x0,x1,x2,,xn}{[x]0,[x]1,[x]2,,[x]n} 分别是至多 n 次的多项式构成的 n+1 维线性空间的一组基,而 Stirling 数告诉我们如何用其中一组基表示另外一组基。第二类 Stirling 数 S(n,m) 是用后一组基表示前一组,而第一类 Stirling 数 s(n,m) 则反之:

(3)[x]n=k=0n(1)nks(n,k)xk

关于第一类 Stirling 数的讨论是题外话,我们不在此做过多展开。

递推式

一个非常重要的问题是,上述两种方式都定义了第二类 Stirling 数,然而它们是否等价?答案显然是等价,否则它们也不会都叫做第二类 Stirling 数。虽然很难优雅地将其中一个定义通过某些手段变换为另一个,但我们可以证明它们满足同样的递推关系,从而证明二者定义的是同一个东西。

为了方便起见,我们规定当 m>nS(n,m)=0。上面提到的两个定义都可以方便地解释这个规定:球盒模型定义中,如果盒子比球还多,那么必然会出现空盒,也就没有合法方案;下降幂定义中,[x]m 是比 xn 更高次的多项式,因此它前面的系数必然是 0。

球盒模型

我们需要规定,如果没有小球也没有盒子,那么视为仅有一种放球方案(即,什么都不做)。这样一来,根据定义立即得到:

  • S(n,0)=0(n>0)
  • S(n,n)=1(n0)

现在计算 S(n,m):将 n 个有区别小球放入 m 个无区别盒子中,然后拿走 1 号小球。如果这时

  • 出现了一个空盒:相当于把其余的小球放入 m1 个盒子中,方案数为 S(n1,m1)
  • 没有出现空盒:相当于把其余的小球放入 m 个盒子中,再将 1 号小球放入任意一个盒子中,方案数为 mS(n1,m)

于是可得:

(4)S(n,m)=mS(n1,m)+S(n1,m1)

下降幂

考察定义式 xn=k=0nS(n,k)[x]k:当 n1 时,[x]n 的展开中不含常数项,又由于 [x]0=1,因此 [x]0 项的系数必定为 0。此外,等式右边 xn 的系数是 S(n,n),它应该等于 1。综上可得:

  • S(n,0)=0(n>0)
  • S(n,n)=1(n0)

注意到 xn=xxn1,代入定义式:

(5)xn=xxn1=xk=0n1S(n1,k)[x]k=k=0n1xS(n1,k)[x]k=k=0n1(xk+k)S(n1,k)[x]k=k=0n1S(n1,k)(xk)[x]k+k=0n1kS(n1,k)[x]k=k=0n1S(n1,k)[x]k+1+k=0n1kS(n1,k)[x]k=k=1nS(n1,k1)[x]k+k=1n1kS(n1,k)[x]k=k=1n(S(n1,k1)+kS(n1,k))[x]k

最后一步利用了 S(n1,n)=0。对比上式和定义式,即得到 S(n,k)=kS(n1,k)+S(n1,k1)

因此,上面两种定义得到的结果满足相同的递推关系、有相同的递推初值和边界值;从而,这两种定义是等价的。

一些边界值

除了上面得到的递推关系初值之外,我们还可以用球盒模型推导一些其他的边界值,用来方便一些情况下的计算:

  • S(n,2)=2n11

这是将 n 个有区别小球放入 2 个无区别盒子的方案数。除了 1 号小球之外的每个小球都可以选择和 1 号小球是否位于同一个盒子中,一共有 2n1 种情况;但是要排除它们都跟 1 号小球在同一个盒子中的情况(这时另一个盒子是空盒),所以要再减去 1。

  • S(n,n1)=(n2)
  • S(n,n2)=(n3)+3(n4)
  • S(n,n3)=(n4)+10(n5)+15(n6)

这些形如 S(n,nδ) 的边界值可以通过讨论放球最多的盒子放了多少球得出。以 S(n,n2) 为例,装了最多球的盒子里面可能有 3 个或 2 个球。如果是 3 个,那么相当于是 n3 个盒子中各装一个球,剩下一个盒子装 3 个球,方案数就是 (n3);如果是 2 个,那么相当于 n4 个盒子中各装一个球,剩下 2 个盒子各装 2 个球,方案数就是 12(42)(n4)=3(n4)

通过上面三个边界值可以找到规律 S(n,nk)=j=1kT(k,j)(nj+k) ,其中 T(k,j) 是由 kj 决定的常系数。T(k,j) 被称作 Ward Numbers,它构成的序列可以在 OEIS 上找到。对于不同的 kjT(k,j) 实际上构成了一个数字三角形,OEIS 上的这个序列是它展平后的结果。

组合等式

慕课上讲到的唯一一个等式是第二类 Stirling 数的通项公式,当然由于其中使用了求和符号所以并不是解析式。这个通项是:

(6)S(n,m)=1m!k=0m(mk)(1)k(mk)n

要求出这个式子有很多方法,我简单查找了一下就得到了二项式反演、容斥原理和生成函数三种方案。此处因为算是复习上课内容,所以就用生成函数来得到这个式子。

以球盒模型来考虑这个问题,为了方便,先讨论 m有区别盒子时的情况 S(n,m)。由于每两个盒子都是不相同的,因此显然有 S(n,m)=m!S(n,m)。这时,我们就可以把问题转变为m 类元素中取 n 个做可重排列(每一类元素都至少选取 1 个)。新问题的解与原问题的解一一对应:假如新问题得到的可重排列中下标 i 处是第 j 类元素,那么原问题中就把 i 号球放进 j 号盒子。

将问题转化为排列计数之后,我们就可以利用指数型生成函数处理它:

(7)Ge(x)=(x+x22!+x33!+)m=(ex1)m=k=0m(mk)(1)ke(mk)x=k=0m(mk)(1)kn=0(mk)nn!xn=n=0xnn!k=0m(mk)(1)k(mk)n

因此 S(n,m)=k=0m(mk)(1)k(mk)n,再除以 m! 后即得到上述通项公式。

Upd:慕课后面又讲了使用容斥原理的计算方法,相比之下要直观许多。思路仍然是先计算 S(n,m):由于它要求每个盒子非空,因此我们令 Ai 表示第 i 个盒子为空的放球方法,于是就有 S(n,m)=|A1A2Am|。注意到 {Ai} 中任意 k 个集合的交集大小均为 (mk)n,利用容斥原理就直接得到上述等式。

单峰性

慕课上留了一道很有意思的思考题:证明第二类 Stirling 数 S(n,m) 关于 m 是单峰(unimodal)的。

所谓单峰,是指序列 {S(n,k)|k=0,1,2,,n} 先单调递增再单调递减。形式地,对于任意 n0,都存在一个 K 使得

(8)S(n,0)S(n,1)S(n,K1)S(n,K)S(n,K+1)S(n,n1)S(n,n)

然而,作为特殊计数序列的第二类 Stirling 数实际上具有比这更强的性质。下面我们详细定义第二类 Stirling 数所具有的单峰性:

对任意 n0,存在唯一的非负整数 K(n) 满足:

  • S(n,0)<S(n,1)<<S(n,K(n))S(n,K(n)+1)>>S(n,n1)>S(n,n)
  • K(n)=K(n1) 或者 K(n)=K(n1)+1

这也就是说,序列 {S(n,k)|k=0,1,2,,n} 恰好拥有 1 个或者 2 个相邻的最大值点;在最大值点左侧,序列严格递增;在最大值点右侧,序列严格递减。此外,当 n 增加 1 时,最大值点或者不发生改变,或者也增加 1。

这个结论我并不会证明,在网上找了很久也没有找到好的参考资料。所幸在一顿中英日语混合搜索过后,发现一篇证了此结论的论文;论文十分牛逼,摘要就一句话:

For fixed n , Stirling numbers of the second kind, S(n,r) have a single maximum.

接下来,我们复现这篇论文中的证明,但是有一点不同:论文中讨论了最值点的位置,但事实上,仅需证明单峰性的话是无需做这一讨论的。

另一个递推式

回顾一开始得到的递推式:

(9)S(n,m)=mS(n1,m)+S(n1,m1)

为了证明 S(n,m),我们还需要利用球盒模型给出第二类 Stirling 数的另一个递推式:

(10)S(n,m)=k=m1n1(n1k)S(k,m1)

这个公式很容易理解:首先把 1 号小球放入一个盒子中,剩下 n1 个小球和 m1 个盒子。我们枚举剩下的小球中有多少个放在了这 m1 个盒子中:如果在这些盒子中放了 k 个小球,那么选出这些小球有 (n1k) 种方案,把它们放入这些盒子又有 S(k,m1) 种方案;至于其余的 nk1 个小球则只能和 1 号小球放到同一个盒子中。根据乘法原理和加法原理,就可以得到上述递推式。

完整证明

n 施加归纳。当 n=0,1,2,3 时有 K(n)=0,1,1,2,结论显然成立。

n>3 时,待证的命题实际上可以分为两项:

  • 递增部分:证明对 1rK(n)S(n+1,r)>S(n+1,r1) 成立
  • 递减部分:证明对 K(n)+1rnS(n+1,r)>S(n+1,r+1) 成立

一旦二者都成立,讨论 S(n+1,K(n))S(n+1,K(n)+1) 的大小关系,自然就有 K(n+1){K(n),K(n)+1},从而完成整个归纳步骤。下面我们分别证明两个子命题。

递增部分

r=1 时,1=S(n+1,r)>S(n+1,r1)=0 显然成立。

r=2,3,,K(n) 时,利用递推式 (1) 和第一类数学归纳法的归纳假设可得

(11)S(n+1,r)S(n+1,r1)=rS(n,r)+S(n,r1)(r1)S(n,r1)S(n,r2)=r(S(n,r)S(n,r1))+(S(n,r1)S(n,r2))+S(n,r1)>r×0+0+0=0

因此有 S(n+1,r)>S(n+1,r1) 成立。

递减部分

r=n 时,(n+12)=S(n+1,r)>S(n+1,r+1)=1 显然成立。

r=K(n)+1,K(n)+2,,n1 时,利用递推式 (2) 和第二类数学归纳法的归纳假设可得

(12)S(n+1,r)S(n+1,r+1)=k=r1n(nk)S(k,r1)k=rn(nk)S(k,r)=(nr1)S(r1,r1)+k=rn(nk)(S(k,r)S(k,r+1))(nr1)+k=rn(nk)×0>0

因此有 S(n+1,r)>S(n+1,r+1) 成立。注意在第三步中我们利用了 S(k,r)S(k,r+1)0,实际上隐含地使用了一个结论,即 K(n)K(k)rkn 成立。根据归纳假设,这是显然的。

由于两个子命题均已得证,因此归纳步骤也得证。根据第一类和第二类数学归纳法,原命题对全部非负整数 n 成立。综上,序列 {S(n,k)|k=0,1,2,,n} 是单峰的。