斯特林数和贝尔数

斯特林数和贝尔数

版权说明:抄写了hypoc的博客

第一类斯特林数

符号: (egin{bmatrix}n\mend{bmatrix})(s(n,m))

意义: (n) 个不同球穿成 (m) 条项链的方案数。

(n) 个球接在前面 (n-1) 个小球中某一个的后面或新开一条项链。

递推式:

[s(n,m)=(n-1)s(n-1,m)+s(n-1,m-1) ]

复杂度 (O(nm))


考虑生成函数优化。

(i) 次选择时,有 (i-1) 中选择不创造新的项链,(1) 种选择创造新项链。写成生成函数就是

[prod_{i=0}^{n-1} (x+i) ]

使用分治来解决,每层再用 (FFT) 将左右两边的多项式相乘, (x^m) 的系数是 (s(n,m)) 。时间复杂度 (O(nlog^2 n))

有些题存在 (O(nlog n )) 做法。

第二类斯特林数

符号: (egin{Bmatrix}n\mend{Bmatrix})(S(n,m))

意义: (n) 个不同小球放入 (m) 个相同盒子的方案数。

要么和前面的放一个盒子里要么新开一个。

[S(n,m)=mS(n-1,m)+S(n-1,m-1) ]

时间复杂度 (O(nm))


生成函数无法加速了。考虑容斥加速。

不妨先假设每个盒子都不一样,最后再除以 (m!)

容斥需要计算不合理方案。空盒子即不合理。

[egin{aligned} S(n,m)&=frac {1} {m!} sum_{i=0}^m (-1)^i {mchoose i} (m-i)^n\ &=frac {1} {m!} sum_{i=0}^m (-1)^i frac {m!} {i! (m-i)!} (m-i)^n\ &=sum_{i=0}^m frac {(-1)^i} {i!} imes frac {(m-i)^n} {(m-i)!} end{aligned} ]

时间复杂度 (O(nlog n))

据说是 (FFT) 搞一搞。

斯特林数与下降幂

一般幂转下降幂

考虑 (x^n) 的组合意义, (n) 个不同的球放入 (x) 个不同的盒子的方案数。

枚举有多少非空的盒子:

[x^n=sum_{i=1}^x {xchoose i} S(n,i) i!=sum_{i=1}^x S(n,i) x^{underline i} ]

下降幂转一般幂

第一类斯特林数的生成函数是上升幂,即:

[sum_{i=1}^n s(n,i) x^i=prod_{i=0}^{n-1} (x+i)=x^{overline n} ]

如果将 ((x+i)) 替换为 ((x-i)) 那么就会求出下降幂。

[x^{underline n} =sum_{i=1}^n (-1)^{n-i} s(n,i)x^i ]

贝尔数

(n) 个不同小球放在若干个相同的盒子里,问方案数。

[B_n=sum_{i=1}^n S(n,i) ]

递推公式:

枚举 (i) 表示 (n-i) 个球和 (n+1) 个球在同一个盒子里,剩下的 (i) 个又有 (B_i) 种。选球花 (nchoose i)

[B_{n+1}=sum_{i=0 }^n {nchoose i} B_i ]


快速求 (B_i) :

[egin{aligned} B_n&=sum_{i=1}^n S(n,i)\ &=sum_{i=1}^n sum_{j=0}^i frac {(-1)^j} {j!} imes frac {(i-j)^n} {(i-j)!}\ &=sum_{j=0}^i frac {(-1)^j} {j!} imes sum_{i=j}^n frac {(i-j)^n} {(i-j)!}\ end{aligned} ]

(O(nlog n)) 处理 (frac {(n-i)^n} {(n-i)!}) 后缀和,(O(n)) 求出 (B_n) 即可。

qaqaq
原文地址:https://www.cnblogs.com/zdsrs060330/p/14619391.html