斯特林数相关

斯特林数 往往用于普通幂与下降幂的互相转换,也可以用来做一些计数问题。

第一类斯特林数第二类斯特林数。我们用 ({nrace m}) 表示 第二类斯特林数,用 ({nrack m}) 表示 第一类斯特林数。

本文尽量采用比较“组合”的证明方式。当然,其中大部分式子都可以用数学归纳法证明。

第二类斯特林数

63GYWDLWTF_0AV58ZU__N_G.png

第二类斯特林数 ({nrace m}) 表示把 (n) 个不同小球放入 (m) 个相同盒子,盒子不能空的方案数。

例如把 (4) 个不同小球 ({1,2,3,4}) 放入 (2) 个相同盒子有 (7) 种方案,为:

({1}{2,3,4},{2}{1,3,4},{3}{1,2,4},{4}{1,2,3},)

({1,2}{3,4},{1,3}{2,4},{1,4}{2,3})

所以 ({4race 2}=7)

规定:(0le n<m) 时,({nrace m}=0)

({nrace m}) 如何计算呢?

一、递推

考察 (n) 号小球所在的盒子。

  • 如果为 (n) 号小球单独开一个盒子,此时的方案数即为 ({n-1race m-1})

  • 如果把 (n) 号小球放入先前开的盒子里,你要从先前已经有的 (m) 个盒子里选出一个来放它,方案数为 (m{n-1race m})

于是得到:

[{nrace m}={n-1race m-1}+m{n-1race m} ]

二、容斥

众所周知,把 (n) 个不同小球放入 (m) 个不同盒子,盒子可以空的方案数为 (m^n)

先考虑把 (n) 个不同小球放入 (m) 个不同盒子,盒子不能空的方案数。根据容斥原理,必然是 总方案数 减去 钦定一个盒子空了的方案数,加上 钦定两个盒子空了的方案数……等于 (sum_{i=0}^m (-1)^iinom mi(m-i)^n)

相比第二类斯特林数,刚刚那个东西只是多了盒子的顺序,于是有 (m!{nrace m}=sum_{i=0}^m (-1)^iinom mi(m-i)^n),也就是

[{nrace m}=frac 1{m!}sum_{i=0}^m (-1)^iinom mi(m-i)^n ]

,这就是通项公式了。

贝尔数 (b_n)表示把 (n) 个不同小球放入若干个相同盒子,盒子不能空的方案数。第二类斯特林数每行的和为贝尔数,即 (b_n=sum_{j=0}^n{nrace j})。但这不是本文的重点。

第一类斯特林数

BA2_FMLPS9K_F1.png

第一类斯特林数 ({nrack m}) 表示将 (n) 个不同元素划分为 (m) 个轮换的方案数。

例如把 (4) 个不同元素 ({1,2,3,4}) 划入 (2) 个轮换有 (11) 种方案,为:

((1)(2,3,4),(1)(2,4,3),(2)(1,3,4),(2)(1,4,3),)

((3)(1,2,4),(3)(1,4,2),(4)(1,2,3),(4)(1,3,2),)

((1,2)(3,4),(1,3)(2,4),(1,4)(2,3))

所以 ({4rack 2}=11)

规定:(0le n<m) 时,({nrack m}=0)

({nrack m}) 如何计算呢?

递推

考察 (n) 号元素所在的轮换。

  • 如果为 (n) 号元素单独开一个轮换,此时的方案数即为 ({n-1rack m-1})

  • 如果把 (n) 号元素放入先前的轮换里,那么你要从先前有的 ((n-1)) 个间隙里选出一个来插入它,方案数为 ((n-1){n-1rack m})

于是得到:

[{nrack m}={n-1rack m-1}+(n-1){n-1rack m} ]

一些性质: (sum_{j=0}^n{nrack j}=n!,{nrack 1}=(n-1)!)

考虑大小为 (n) 的一个置换,必然可以分解为若干不相交轮换的复合。

例如置换(egin{pmatrix}1 & 2 & 3 & 4\4 & 3 & 2 &1\ end{pmatrix}=(1 4)(2 3))

则恰能分解为 (m) 个不相交轮换的 大小为 (n) 的置换 恰有 ({nrack m}) 个。

普通幂与下降幂的转换

下降幂:(a^underline b=prod_{i=0}^{b-1}(a-i)),也即 (A_a^b)

斯特林数可以用于普通幂与下降幂的互相转换。什么意思呢?

有如下式子:

[x^n=sum_{k=0}^n {nrace k}x^underline k\x^underline n=sum_{k=0}^n (-1)^{n-k}{nrack k}x^k ]

对于第一个式子,考虑用两种方法计算把 (n) 个不同小球放入 (x) 个不同盒子,盒子可以空的方案数:

  • (n) 个球,每个球有 (x) 个盒子可以选,故为 (x^n)
  • 盒子不可以空的方案数为 (x!{nrace x}) ;有球的盒子数为 (k) 时,方案数即 (inom xk k!{nrace k}=x^{underline k}{nrace k}),故答案为 (sum_{k=0}^n {nrace k}x^underline k\)

用两个式子算同一个东西,必然是相等的。

对于第二个式子,也能用类似的方法证明,可以自行思考。

借此,可以用第二类斯特林数加速求自然数 (k) 次幂和,如下:
( S_m(n)=sum_{i=0}^n i^m\=sum_{i=0}^nsum_{j=0}^m{mrace j}i^{underline j}\=sum_{j=0}^m{mrace j}sum_{i=0}^ni^{underline j}\=sum_{j=0}^m{mrace j}j!sum_{i=0}^ninom ij\=sum_{j=0}^m{mrace j}j!inom{n+1}{j+1}\=sum_{j=0}^m{mrace j}frac 1{j+1}(n+1)^{underline {j+1}} )
其中 (m) 为正整数,(n) 为非负整数。

上升幂:(a^overline b=prod_{i=0}^{b-1}(a+i))

普通幂和上升幂也有类似的转换。

[x^n=sum_{k=0}^n {nrace k}(-1)^{n-k}x^overline k\x^overline n=sum_{k=0}^n {nrack k}x^k ]

斯特林反演

你发现式子 (x^n=sum_{k=0}^n {nrace k}x^underline k) 的右边有个下降幂。

你闲得蛋疼想把下降幂转回普通幂。

你得到 (x^n=sum_{k=0}^n {nrace k}x^underline k)

(=sum_{k=0}^n {nrace k}sum_{m=0}^k (-1)^{k-m}{krack m}x^m)

(=sum_{m=0}^nsum_{k=m}^n (-1)^{k-m}{nrace k} {krack m}x^m)

不论 (x) 取多少,左右两边都要相等。所以右边只有 (x^n) 的系数是 (1),其它系数都是 (0)

(sum_{k=m}^n (-1)^{k-m}{nrace k} {krack m}=[m=n])

我们知道有一个二项式反演 (f_n=sumlimits_{j=0}^n(-1)^j{nchoose j}g_jLeftrightarrow g_n=sumlimits_{j=0}^n(-1)^j{nchoose j}f_j)

现在我们还有一个斯特林反演

[f_n=sumlimits_{j=0}^n(-1)^j{nrace j}g_jLeftrightarrow g_n=sumlimits_{j=0}^n(-1)^j{nrack j}f_j ]

这里只证从右推到左(从左推到右是类似的)。

(f_n=sum_{j=0}^n [j=n]f_j)

(=sum_{j=0}^nsum_{k=j}^n (-1)^{k-j}{nrace k} {krack j}f_j)

(=sum_{k=0}^n(-1)^k{nrace k} sum_{j=0}^k (-1)^{j}{krack j}f_j)

(=sum_{k=0}^n(-1)^k{nrace k} g_k)

小练习

1.当 (n)(k) 变成负整数的时候,怎样定义 ({nrace k})(nrack k) 才能满足递推式?

2.讨论 (sum_{k=0}^n(-1)^k{nrack k}) 的值。

更快速的计算

以下不一定是最快的做法,但都只有一只 (log)

第二类斯特林数·行

由通项公式:({nrace m}=frac 1{m!}sum_{i=0}^m inom mi(-1)^i(m-i)^n)

明显是一个卷积,于是做到 (O(nlog n))

第二类斯特林数·列

({nrace m}) 是把 (n) 个不同小球放入 (m) 个相同盒子,盒子不能空的方案数。

(G(x)) 为非空集合的 (mathbf {EGF})(F_m(x)) 为第二类斯特林数第 (m) 列的的 (mathbf{EGF}),则有 (F_m(x)=frac 1{m!}G^m(x))

就是一个多项式快速幂,(O(nlog n))

第一类斯特林数·行

(x^overline n=sum_{k=0}^n {nrack k}x^k),你发现这恰好就是第一类斯特林数第 (n) 行的 (mathbf {OGF})

(x^{overline n}=prod_{i=0}^{n-1}(x+i)),就可以分治做到 (O(nlog^2n)) 了。

但是可以更快。由上可得:

  • (x^overline{n+1}=x^{overline n}(x+n+1))

  • (x^overline{2n}=x^{overline n}(x+n)^{overline n})

    (=x^overline nsum_{k=0}^n {nrack k}(x+n)^k)

    (=x^overline nsum_{k=0}^n {nrack k}sum_{j=0}^k{kchoose j} n^{k-j}x^j)

    (=x^overline nsum_{j=0}^nx^jsum_{k=j}^n {nrack k}{kchoose j} n^{k-j})
    可以看出一个卷积。

每次卷积是 (O(nlog n)) 的,长度每次翻倍,类似 多项式求逆的分析,可得总复杂度 (O(nlog n))

第一类斯特林数·列

注意,(nrack m) 表示恰能分解为 (m) 个不相交轮换的 大小为 (n) 的置换的个数。

(G(x)) 为轮换的 (mathbf{EGF})(F_m(x)) 为第一类斯特林数第 (m) 列的的 (mathbf{EGF}),则有 (F_m(x)=frac 1{m!}G^m(x))

多项式快速幂,(O(nlog n))

例题

Cards(CF1278F,加强版:luogu P6031)

(m) 张牌,其中有一张是王牌。将这些牌均匀随机打乱 (n) 次,设有 (x) 次第一张为王牌,求 (x^k) 的期望值。

答案对 (998244353) 取模。

(1le kle 5000)(1le n,m<998244353)

加强版:(1le kle 10^7)(1le n,m<998244353)

方阵(2018 雅礼集训1-16)

给出一个 (n imes m) 的矩形,每个位置可以填上 ([1,c]) 中的任意一个数,要求填好后 任意两行互不相同 且 任意两列互不相同,两行或两列相同 当且仅当 对应位置都相等,求方案数。

答案对 (1004535809) 取模。

(1le n,mle 5000,1le c<1004535809)

更多题目

9019 10237 序列计数

FJOI2016 建筑师(加强版:CF960G)

CF932E Team Work

luogu P6620 组合数问题

luogu P4827 Crash 的文明世界

9019 10347 矩阵

BZOJ 4671 异或图

更更多题目

luogu P4091 求和

CF715E Complete the Permutations

CF961G Partitions

参考资料《具体数学》

原文地址:https://www.cnblogs.com/Camp-Nou/p/12994050.html