斯特林数相关

联合省选的D1T2放出了一道裸的斯特林数,幸亏之前推过第二类斯特林数求自然数幂和,所以很幸运地切了。
这次比赛之后dyp和gmh77疯狂学斯特林数,从此免疫。
惊得我也系统地学一下斯特林数做做样子。


概念

第一类斯特林数:记为 s ( m , n ) s(m,n) s(m,n)(也可以用中括号表示),组合意义为 m m m个数形成 n n n个圆排列的方案数。
有个比较系统的定义: s ( m , n ) = [ x n ] ∏ i = 0 m − 1 ( x + i ) s(m,n)=[x^n]\prod_{i=0}^{m-1}(x+i) s(m,n)=[xn]i=0m1(x+i)
性质:
s ( m , n ) = ( m − 1 ) ∗ s ( m − 1 , n ) + s ( m − 1 , n − 1 ) s(m,n)=(m-1)*s(m-1,n)+s(m-1,n-1) s(m,n)=(m1)s(m1,n)+s(m1,n1)
组合意义可证。
∑ k = 0 n s ( n , k ) = n ! \sum_{k=0}^ns(n,k)=n! k=0ns(n,k)=n!
每一种排列,对应着一种轮换。意思记排列为 p p p i i i p i p_i pi连边,这样就会形成若干个环。

第二类斯特林数:记为 S ( m , n ) S(m,n) S(m,n)(也可以用大括号表示),组合意义为 m m m个数形成 n n n个集合的方案数。
性质:
S ( m , n ) = n ∗ S ( m − 1 , n ) + S ( m − 1 , n − 1 ) S(m,n)=n*S(m-1,n)+S(m-1,n-1) S(m,n)=nS(m1,n)+S(m1,n1)
组合意义可证。
S ( m , n ) = 1 n ! ∑ k = 0 n ( − 1 ) k C ( n , k ) ( n − k ) m S(m,n)=\frac{1}{n!}\sum_{k=0}^{n}(-1)^kC(n,k)(n-k)^m S(m,n)=n!1k=0n(1)kC(n,k)(nk)m
反演得到(下面有提及)。
∑ k = 0 n S ( n , k ) = B n \sum_{k=0}^nS(n,k)=B_n k=0nS(n,k)=Bn
B B B表示贝尔数。

有符号斯特林数:顾名思义就是有符号的斯特林数。
s s ( m , n ) = − ( m − 1 ) ∗ s s ( m − 1 , n ) + s s ( m − 1 , n − 1 ) s_s(m,n)=-(m-1)*s_s(m-1,n)+s_s(m-1,n-1) ss(m,n)=(m1)ss(m1,n)+ss(m1,n1)
S s ( m , n ) = − n ∗ S s ( m − 1 , n ) + S s ( m − 1 , n − 1 ) S_s(m,n)=-n*S_s(m-1,n)+S_s(m-1,n-1) Ss(m,n)=nSs(m1,n)+Ss(m1,n1)

下标 s s s意思为“signed”

打个表出来可以发现
s s ( m , n ) = ( − 1 ) m − n s ( m , n ) s_s(m,n)=(-1)^{m-n}s(m,n) ss(m,n)=(1)mns(m,n)
S s ( m , n ) = ( − 1 ) m − n S ( m , n ) S_s(m,n)=(-1)^{m-n}S(m,n) Ss(m,n)=(1)mnS(m,n)


性质

s ( m , n ) ≥ S ( m , n ) s(m,n)\geq S(m,n) s(m,n)S(m,n)
排列数大于等于集合数。

普通幂、上升幂、下降幂相关:(这个在推式子的时候经常能够用到!)
x n = ∑ k = 0 n S ( n , k ) x k ‾ x^n=\sum_{k=0}^nS(n,k)x^{\underline k} xn=k=0nS(n,k)xk
x n = ∑ k = 0 n S ( n , k ) ( − 1 ) n − k x k ‾ = ∑ k = 0 n S s ( n , k ) x k ‾ x^n=\sum_{k=0}^nS(n,k)(-1)^{n-k}x^{\overline k}=\sum_{k=0}^nS_s(n,k)x^{\overline k} xn=k=0nS(n,k)(1)nkxk=k=0nSs(n,k)xk
x n ‾ = ∑ k = 0 n s ( n , k ) x k x^{\overline n}=\sum_{k=0}^ns(n,k)x^k xn=k=0ns(n,k)xk
x n ‾ = ∑ k = 0 n s ( n , k ) ( − 1 ) n − k x k = ∑ k = 0 n s s ( n , k ) x k x^{\underline n}=\sum_{k=0}^ns(n,k)(-1)^{n-k}x^k=\sum_{k=0}^ns_s(n,k)x^k xn=k=0ns(n,k)(1)nkxk=k=0nss(n,k)xk
具体证明嘛,各种归纳,各种组合意义。


快速求斯特林数

第一类斯特林数:
把定义式搬下来: s ( m , n ) = [ x n ] ∏ i = 0 m − 1 ( x + i ) s(m,n)=[x^n]\prod_{i=0}^{m-1}(x+i) s(m,n)=[xn]i=0m1(x+i)
s m ( x ) = ∏ i = 0 m − 1 ( x + i ) s_m(x)=\prod_{i=0}^{m-1}(x+i) sm(x)=i=0m1(x+i)
考虑倍增求这个东西。从 s m ( x ) s_m(x) sm(x)推到 s 2 m ( x ) s_{2m}(x) s2m(x)时:
s 2 m ( x ) = s m ( x ) s m ( x + m ) s_{2m}(x)=s_{m}(x)s_m(x+m) s2m(x)=sm(x)sm(x+m)
快速求出 s m ( x + m ) s_m(x+m) sm(x+m)。设 s m ( x ) = ∑ i = 0 m s m , i x i s_m(x)=\sum_{i=0}^ms_{m,i}x^i sm(x)=i=0msm,ixi。之前已经求出 s m , i s_{m,i} sm,i
s m ( x + m ) = ∑ i = 0 m s m , i ( x + m ) i s_m(x+m)=\sum_{i=0}^ms_{m,i}(x+m)^i sm(x+m)=i=0msm,i(x+m)i
二项式展开一下,推一波式子,就可以发现一个卷积。
于是计算 s m ( x + m ) s_m(x+m) sm(x+m)的时间复杂度是 O ( m lg ⁡ m ) O(m\lg m) O(mlgm)的。
由于 m m m是两倍两倍地扩大,所以总的时间复杂度也是 O ( m lg ⁡ m ) O(m \lg m) O(mlgm)

第二类斯特林数:
把上面那个普通幂转下降幂的式子搬下来,简单反演一下,得到:
n ! S ( m , n ) = ∑ k = 0 n ( − 1 ) k C ( n , k ) ( n − k ) m n!S(m,n)=\sum_{k=0}^{n}(-1)^kC(n,k)(n-k)^m n!S(m,n)=k=0n(1)kC(n,k)(nk)m
把后面的那个组合数拆开,可以发现这是个很明显的卷积形式。
时间复杂度 O ( n lg ⁡ n ) O(n \lg n) O(nlgn)


斯特林反演

f ( n ) = ∑ k = 0 n S ( n , k ) g ( k ) ⟺ g ( n ) = ∑ k = 0 n ( − 1 ) n − k s ( n , k ) f ( k ) f(n)=\sum_{k=0}^n S(n,k)g(k) \Longleftrightarrow g(n)=\sum_{k=0}^n(-1)^{n-k}s(n,k)f(k) f(n)=k=0nS(n,k)g(k)g(n)=k=0n(1)nks(n,k)f(k)
有个叫反转公式的东西:
∑ k s ( n , k ) S ( k , m ) ( − 1 ) n − k = [ m = n ] \sum_ks(n,k)S(k,m)(-1)^{n-k}=[m=n] ks(n,k)S(k,m)(1)nk=[m=n]
∑ k S ( n , k ) s ( k , m ) ( − 1 ) n − k = [ m = n ] \sum_kS(n,k)s(k,m)(-1)^{n-k}=[m=n] kS(n,k)s(k,m)(1)nk=[m=n]
关于这个怎么证明……最严谨的方法应该是归纳。

写公式太麻烦,直接口胡一下证明的思路(挺好推的)。
比如上面这条式子: ∑ k s ( n , k ) S ( k , m ) ( − 1 ) n − k = [ m = n ] \sum_ks(n,k)S(k,m)(-1)^{n-k}=[m=n] ks(n,k)S(k,m)(1)nk=[m=n]
先将 s ( n , k ) s(n,k) s(n,k)用递推式拆开,展开一下。
再将 S ( k , m ) S(k,m) S(k,m)用递推式拆开,展开一下。
照着这么做就可以很自然地归纳证明出来了。
另一条式子也可以类似地推出来。
看了一些博客,有些博客里面写了一种不是很严谨的证明方法:
具体就是取一个普通幂 n m n^m nm,将它先用第二类斯特林数表示成下降幂多项式,然后将这个下降幂用第一类斯特林数表示成普通幂。
推推式子就会得到这样: n m = ∑ j = 0 m n j ∑ k = j m S ( m , k ) s ( k , j ) ( − 1 ) j − k n^m=\sum_{j=0}^mn^j\sum_{k=j}^mS(m,k)s(k,j)(-1)^{j-k} nm=j=0mnjk=jmS(m,k)s(k,j)(1)jk
然后谁告诉我,这怎么就能直接得到 ∑ k = j m S ( m , k ) s ( k , j ) ( − 1 ) j − k = [ j = m ] \sum_{k=j}^mS(m,k)s(k,j)(-1)^{j-k}=[j=m] k=jmS(m,k)s(k,j)(1)jk=[j=m]了???
这种方法只能解释假设反转公式成立,这个东西也成立;但不能反过来推啊……

如果设矩阵 F i , j = S ( i , j ) F_{i,j}=S(i,j) Fi,j=S(i,j) G i , j = ( − 1 ) i − j s ( i , j ) G_{i,j}=(-1)^{i-j}s(i,j) Gi,j=(1)ijs(i,j)
(或者 F i , j = s ( i , j ) F_{i,j}=s(i,j) Fi,j=s(i,j) G i , j = ( − 1 ) i − j S ( i , j ) G_{i,j}=(-1)^{i-j}S(i,j) Gi,j=(1)ijS(i,j)
不难发现 F ∗ G = E F*G=E FG=E,即 F F F G G G互逆。

拉赫数(第三类斯特林数?)

似乎只有维基上略有提及,所以不够详细请见谅。
有错误请指出。

无符号拉赫数:
上升幂和下降幂定义:
x n ‾ = ∑ k = 0 n L ( n , k ) x n ‾ x^{\overline n}=\sum_{k=0}^nL(n,k)x^{\underline n} xn=k=0nL(n,k)xn
x n ‾ = ∑ k = 0 n ( − 1 ) n − k L ( n , k ) x n ‾ x^{\underline n}=\sum_{k=0}^{n}(-1)^{n-k}L(n,k)x^{\overline n} xn=k=0n(1)nkL(n,k)xn
递推式定义: L ( m , n ) = L ( m − 1 , n − 1 ) + ( n − 1 + m ) L ( m , n − 1 ) L(m,n)=L(m-1,n-1)+(n-1+m)L(m,n-1) L(m,n)=L(m1,n1)+(n1+m)L(m,n1)
矩阵乘法定义: L ( m , n ) = ∑ k s ( m , k ) S ( k , n ) L(m,n)=\sum_k s(m,k)S(k,n) L(m,n)=ks(m,k)S(k,n)

有符号拉赫数:
上升幂和下降幂定义:
x n ‾ = ( − 1 ) n ∑ k = 0 n L s ( n , k ) x n ‾ x^{\overline n}=(-1)^n\sum_{k=0}^nL_s(n,k)x^{\underline n} xn=(1)nk=0nLs(n,k)xn
x n ‾ = ( − 1 ) k ∑ k = 0 n L s ( n , k ) x n ‾ x^{\underline n}=(-1)^k\sum_{k=0}^{n}L_s(n,k)x^{\overline n} xn=(1)kk=0nLs(n,k)xn
L s ( m , n ) = ( − 1 ) m L ( m , n ) L_s(m,n)=(-1)^mL(m,n) Ls(m,n)=(1)mL(m,n)

性质:
L ( m , n ) = C ( m − 1 , n − 1 ) m ! n ! L(m,n)=C(m-1,n-1)\frac{m!}{n!} L(m,n)=C(m1,n1)n!m!
归纳可证:
∑ k L s ( m , k ) L s ( k , n ) = ∑ k ( − 1 ) m − k L ( m , k ) L ( k , n ) = [ m = n ] \sum_kL_s(m,k)L_s(k,n)=\sum_k(-1)^{m-k}L(m,k)L(k,n)=[m=n] kLs(m,k)Ls(k,n)=k(1)mkL(m,k)L(k,n)=[m=n]
L ( n , k ) = n ! [ x n ] 1 k ! ( x 1 − x ) k L(n,k)=n![x^n]\frac{1}{k!}(\frac{x}{1-x})^k L(n,k)=n![xn]k!1(1xx)k


参考资料

https://www.cnblogs.com/Wuweizheng/p/8638858.html
https://www.cnblogs.com/hchhch233/p/10016543.html
https://www.cnblogs.com/owenyu/p/6724661.html
https://www.cnblogs.com/gzy-cjoier/p/8426987.html
百度百科
维基百科

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值