第一类斯特林数学习记录
发布日期:2021-06-29 06:00:12 浏览次数:2 分类:技术文章

本文共 2499 字,大约阅读时间需要 8 分钟。

最近做题有时会碰到斯特林数(Stirling数),就觉得好好的学习一番,于是呢,写下这篇博客,来记录一些知识

简单介绍

第一类斯特林数表示表示将 n 个不同元素构成m个圆排列的数目。——百度百科

第一类斯特林数,可以表示为 s ( n , m ) s(n,m) s(n,m),注意这里是小写

,要与大写的第二类斯特林数区分开来,定义上面也讲到了,但是呢,其实那句话最好改成第一类斯特林数的绝对值,因为第一类斯特林数是分正负的,分为无符号斯特林数 s u ( n , m ) s_u(n,m) su(n,m)和有符号斯特林数 s s ( n , m ) s_s(n,m) ss(n,m)

有无符号Stirling数分别表现为其升阶函数和降阶函数的各项系数[类似于二项式系数],形式如下:

x n ↓ = x ( x − 1 ) ( x − 2 ) ⋅ ⋅ ⋅ ( x − n + 1 ) = ∑ k = 0 n s s ( n , k ) x k x^{n\downarrow}=x(x-1)(x-2)···(x-n+1)=\sum_{k=0}^ns_s(n,k)x^k xn=x(x1)(x2)(xn+1)=k=0nss(n,k)xk
x n ↑ = x ( x + 1 ) ( x + 2 ) ⋅ ⋅ ⋅ ( x + n − 1 ) = ∑ k = 0 n s u ( n , k ) x k x^{n\uparrow}=x(x+1)(x+2)···(x+n-1)=\sum_{k=0}^ns_u(n,k)x^k xn=x(x+1)(x+2)(x+n1)=k=0nsu(n,k)xk

这是一个很烦的式子,但其实呢,有符号和无符号斯特林数之间的关系其实很简单 s s ( n , m ) = ( − 1 ) n + m s u ( n , m ) s_s(n,m)=(-1)^{n+m}s_u(n,m) ss(n,m)=(1)n+msu(n,m)

另外,这个式子的推导可以见我的另一篇博客:

计算公式

第一类斯特林数有个递推式很好想

想一下对于 s u ( n , m ) s_u(n,m) su(n,m)
n = 0 n=0 n=0 m = 0 m=0 m=0那么显然就一种方案
n ≠ 0 n\neq0 n̸=0 m = 0 m=0 m=0那么肯定分配不了,有0种方案
n ≠ 0 n\neq0 n̸=0 m ≠ 0 m\neq0 m̸=0
那么考虑转移
倘若由 s u ( n − 1 , m − 1 ) s_u(n-1,m-1) su(n1,m1)转移而来,则说明新来的一个点自成一个环只有一倍的贡献
倘若由 s u ( n − 1 , m ) s_u(n-1,m) su(n1,m)转移而来,则说明新来的一个点插入到m个环中的n-1个空格的任何一个位置,那么就有n-1倍的贡献,递推式为 s u ( n , m ) = s u ( n − 1 , m − 1 ) + ( n − 1 ) ∗ s u ( n − 1 , m ) s_u(n,m)=s_u(n-1,m-1)+(n-1)*s_u(n-1,m) su(n,m)=su(n1,m1)+(n1)su(n1,m)
有符号的第一类斯特林数的递推式为 s s ( n , m ) = s s ( n − 1 , m − 1 ) − ( n − 1 ) ∗ s s ( n − 1 , m ) s_s(n,m)=s_s(n-1,m-1)-(n-1)*s_s(n-1,m) ss(n,m)=ss(n1,m1)(n1)ss(n1,m)
证明是前面那个公式 ∑ k = 0 n s ( n , k ) x k = x n ↓ = x n − 1 ↓ ∗ ( x − n + 1 ) = ∑ k = 0 n − 1 s ( n − 1 , k ) x k + 1 − n ∗ ∑ k = 0 n − 1 s ( n − 1 , k ) x k \sum_{k=0}^ns(n,k)x^k=x^{n\downarrow}=x^{n-1\downarrow}*(x-n+1)=\sum_{k=0}^{n-1}s(n-1,k)x^{k+1}-n*\sum_{k=0}^{n-1}s(n-1,k)x^k k=0ns(n,k)xk=xn=xn1(xn+1)=k=0n1s(n1,k)xk+1nk=0n1s(n1,k)xk
依次把 x m x^m xm在左右两边的系数提取出来得到
另外有这个式子:(证明在第二类斯特林数的博客里)
x n ↓ = ∑ i = 0 n [ n i ] s x i x^{n\downarrow}=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}_sx^i xn=i=0n[ni]sxi
我们可以通过这个公式在 Θ ( n l o g 2 n ) \Theta(nlog^2n) Θ(nlog2n)的复杂度内用分治+FFT求出某个 n n n对应的所有 s u ( n , m ) s_u(n,m) su(n,m)

性质

除了一些比较容易想到的性质外,第一类斯特林数还有如下性质

s u ( n , 2 ) = ( n − 1 ) ! ∗ ∑ i = 1 n − 1 1 i s_u(n,2)=(n-1)!*\sum_{i=1}^{n-1}\frac{1}{i} su(n,2)=(n1)!i=1n1i1
∑ k = 0 n s u ( n , k ) = n ! \sum_{k=0}^ns_u(n,k)=n! k=0nsu(n,k)=n!
容易发现,每一个排列都对应着一个轮换(相当于i到ai连一条边的一副图),然后枚举轮换里环的数量就好了

应用

第一类斯特林数是一种在组合方面比较有用的数,很多问题都可通过它来解决,熟悉它的性质,才能熟练的运用到公式推导的过程中去

转载地址:https://blog.csdn.net/zhouyuheng2003/article/details/79026975 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:虚树总结
下一篇:不平等博弈问题学习记录(三)(对于超实数在博弈下左大右小以及多堆情况的扩充)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月15日 20时56分19秒