斯特林数(Stirling)——学习笔记

第一类斯特林数

s(n,m) s ( n , m ) 表示 n n 个元素组成 m 个圆排列


s(n,m)=s(n1,m1)+s(n1,m)(n1) s ( n , m ) = s ( n − 1 , m − 1 ) + s ( n − 1 , m ) ∗ ( n − 1 )

s(n,m)=i=1ns(ni,m1)(n1i1)(i1)! s ( n , m ) = ∑ i = 1 n s ( n − i , m − 1 ) ( n − 1 i − 1 ) ( i − 1 ) !

xn¯¯¯=x(x+1)(x+2)...(x+n1)=i=0ns(n,i)xi x n ¯ = x ( x + 1 ) ( x + 2 ) . . . ( x + n − 1 ) = ∑ i = 0 n s ( n , i ) x i

怎么求呢?用 xn¯¯¯ x n ¯

直接展开 xn¯¯¯ x n ¯ ,分治 FFT F F T 可以 O(nlog2n) O ( n log 2 ⁡ n )

更好的方法是倍增求 xn¯¯¯ x n ¯

x2n¯¯¯¯¯¯=xn¯¯¯(x+n)n¯¯¯ x 2 n ¯ = x n ¯ ( x + n ) n ¯

F(x,n)=xn¯¯¯ F ( x , n ) = x n ¯ G(x,n)=(x+n)n¯¯¯ G ( x , n ) = ( x + n ) n ¯
G(x,n)=j=in(ji)F(x,n)nji G ( x , n ) = ∑ j = i n ( j i ) F ( x , n ) n j − i

这样是卷积形式,就能从 xn¯¯¯ x n ¯ 得到 (x+n)n¯¯¯ ( x + n ) n ¯ , O(nlogn) O ( n log ⁡ n ) 时间内求出一行 Stirling S t i r l i n g 数 。

第二类斯特林数

S(n,m) S ( n , m ) 表示 n n 个元素分成 m 个集合的方案数。


S(n,m)=S(n,m1)+S(n1,m)m S ( n , m ) = S ( n , m − 1 ) + S ( n − 1 , m ) ∗ m

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

根据组合意义可以得到

kn=i=0kAikS(n,i)=i=0ki!(ki)S(n,i) k n = ∑ i = 0 k A k i S ( n , i ) = ∑ i = 0 k i ! ( k i ) S ( n , i )

这里要用个东西叫二项式反演,大概是个容斥:
f(n)=i=0n(ni)g(i)g(n)=i=0n(1)ni(ni)f(i) f ( n ) = ∑ i = 0 n ( n i ) g ( i ) ⇒ g ( n ) = ∑ i = 0 n ( − 1 ) n − i ( n i ) f ( i )

用二项式反演得到
S(n,k)=1k!i=0k(1)ki(ki)i!=i=0k(1)kiini!(ki)! S ( n , k ) = 1 k ! ∑ i = 0 k ( − 1 ) k − i ( k i ) i ! = ∑ i = 0 k ( − 1 ) k − i i n i ! ( k − i ) !

然后一次FFT就好了。

注意 kn=ki=0AikS(n,i) k n = ∑ i = 0 k A k i S ( n , i ) 这个等式在推式子,算贡献时很有用,可以代换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值