浅谈两类斯特林数

Preface

下文简单介绍了两类斯特林数,也总结了它们的一些性质
由于第二类较第一类容易理解,更简单,因此先介绍第二类

第二类斯特林数

给你N个元素(有差别),M个集合(无差别),要你将这N个元素放入M个集合,要求没有空集。求方案数。

Text

符号表示为$ S ( i , j ) S(i,j) S(i,j) { j i } \left\{^i_j\right\} {ji}

考虑递推式
i − 1 i-1 i1个元素,若放入了 j − 1 j-1 j1个集合,那么这个元素肯定是新开一个集合,所以等于 S ( i − 1 , j − 1 ) S(i-1,j-1) S(i1,j1)
若已经放入了 j j j个集合,那么这个元素在前面所有元素中选一个放入,就是 S ( i − 1 , j ) ∗ j S(i-1,j)*j S(i1,j)j

总的说来,就是 S ( n , m ) = S ( n − 1 , m ) ∗ m + S ( n − 1 , m − 1 ) S(n,m)=S(n-1,m)*m+S(n-1,m-1) S(n,m)=S(n1,m)m+S(n1,m1)
浅谈两类斯特林数_第1张图片

其实上下两部分就是个二项式反演

根据上面第二类斯特林数的展开式,如果我们想快速求n相同的所有第二类斯特林数,发现上面的式子是将阶乘提出来是一个卷积的形式,NTT优化可以做到 O ( n log ⁡ n ) O(n\log n) O(nlogn)

主要应用在组合数之类的问题中。
几个经典例子。

  • N本书,M个抽屉(无差别),每个抽屉不能为空,求方案数。
    易得 A n s = S ( N , M ) Ans=S(N,M) Ans=S(N,M)

  • N本书,M个抽屉(有差别),每个抽屉不能为空,求方案数。
    易得 A n s = S ( N , M ) M ! Ans=S(N,M)M! Ans=S(N,M)M!

  • N本书,M个抽屉(无差别),每个抽屉可以空,求方案数。
    枚举多少个抽屉非空,易得 A n s = ∑ i = 0 m S ( N , i ) Ans=\sum\limits_{i=0}^{m}S(N,i) Ans=i=0mS(N,i)
    这也就是贝尔数

  • N本书,M个抽屉(有差别),每个抽屉可以空,求方案数。
    枚举非空抽屉数,乘上一个排列。 A n s = ∑ i = 0 m P m i S ( n , i ) Ans=\sum\limits_{i=0}^{m}P_m^iS(n,i) Ans=i=0mPmiS(n,i)

例题

给你M行N列的棋盘,让你放棋子,每行每列至少有1枚棋子,棋子有c种颜色,要求每种颜色至少1枚,求方案数(旋转,翻转算不同方案)。

题解见http://blog.csdn.net/hzj1054689699/article/details/54645826

第一类斯特林数

给你N个元素(有差别),M个圆环(无差别),要你将N个元素放入M个圆环中,求方案数
圆环有排列,但是不能循环同构

Text

第一类斯特林数有两种,带符号与无符号,分别用 s s ( n , m ) , s u ( n , m ) s_s(n,m),s_u(n,m) ss(n,m),su(n,m)表示,后者也可记作 [ m n ] \left[^n_m\right] [mn]
同样的我们考虑递推
容易有 s u ( n , m ) = s u ( n − 1 , m − 1 ) + ( n − 1 ) s u ( n − 1 , m − 1 ) s_u(n,m)=s_u(n-1,m-1)+(n-1)s_u(n-1,m-1) su(n,m)=su(n1,m1)+(n1)su(n1,m1)
即考虑新的这个元素是成一个圆环还是插在前面某一个元素的左边。

第一类斯特林数还有另一种定义方式

x m ↑ = P x + m − 1 m = x ( x + 1 ) ( x + 2 ) . . . ( x + m − 1 ) = ∑ i = 0 m s u ( m , i ) x i x^{m\uparrow}=P_{x+m-1}^{m}=x(x+1)(x+2)...(x+m-1)=\sum\limits_{i=0}^{m}s_u(m,i)x^i xm=Px+m1m=x(x+1)(x+2)...(x+m1)=i=0msu(m,i)xi
x m ↓ = P x m = x ( x − 1 ) ( x − 2 ) . . . ( x − m + 1 ) = ∑ i = 0 m s s ( m , i ) x i x^{m\downarrow}=P_{x}^{m}=x(x-1)(x-2)...(x-m+1)=\sum\limits_{i=0}^{m}s_s(m,i)x^i xm=Pxm=x(x1)(x2)...(xm+1)=i=0mss(m,i)xi

无符号第一类斯特林数是上升幂展开式的系数,带符号第一类斯特林数是下降幂展开式的系数
容易发现 s s ( m , i ) = s u ( m , i ) ( − 1 ) m − i s_s(m,i)=s_u(m,i)(-1)^{m-i} ss(m,i)=su(m,i)(1)mi

联系这两个形式可以通过归纳得到,此处不再赘述。

根据上面两个式子,第一类斯特林数可以用分治FFT在n log^2时间求出,也可以采用倍增的方式n log 时间求出。

斯特林反演

F ( n ) = ∑ i = 0 n S ( n , i ) G ( i ) F(n)=\sum\limits_{i=0}^{n}S(n,i)G(i) F(n)=i=0nS(n,i)G(i)
等价于
G ( n ) = ∑ i = 0 n s s ( n , i ) F ( i ) = ∑ i = 0 n ( − 1 ) n − i s u ( n , i ) F ( i ) G(n)=\sum\limits_{i=0}^{n}s_s(n,i)F(i)=\sum\limits_{i=0}^{n}(-1)^{n-i}s_u(n,i)F(i) G(n)=i=0nss(n,i)F(i)=i=0n(1)nisu(n,i)F(i)

如何推导呢?
考虑我们之前关于两类斯特林数的公式,它们连接了下降幂和乘方幂

(1) x m ↓ = ∑ i = 0 m s s ( m , i ) x i \tag 1x^{m\downarrow}=\sum\limits_{i=0}^{m}s_s(m,i)x^i xm=i=0mss(m,i)xi(1)
(2) x m = ∑ i = 0 x S ( m , i ) x i ↓ = ∑ i = 0 m S ( m , i ) x i ↓ \tag 2 x^m=\sum\limits_{i=0}^{x}S(m,i)x^{i\downarrow}=\sum\limits_{i=0}^{m}S(m,i)x^{i\downarrow} xm=i=0xS(m,i)xi=i=0mS(m,i)xi(2)

(2)式代入(1)式
(3) x m ↓ = ∑ i = 0 m s s ( m , i ) ∑ j = 0 i S ( i , j ) x j ↓ \tag 3x^{m\downarrow}=\sum\limits_{i=0}^{m}s_s(m,i)\sum\limits_{j=0}^{i}S(i,j)x^{j\downarrow} xm=i=0mss(m,i)j=0iS(i,j)xj(3)
= ∑ j = 0 m x j ↓ ∑ i = j m s s ( m , i ) S ( i , j ) =\sum\limits_{j=0}^{m}x^{j\downarrow}\sum\limits_{i=j}^{m}s_s(m,i)S(i,j) =j=0mxji=jmss(m,i)S(i,j)

因为上式对所有的x均满足,因此有后面的求和有唯一解
(4) ∑ i = j m s s ( m , i ) S ( i , j ) = [ j = m ] \tag 4\sum\limits_{i=j}^{m}s_s(m,i)S(i,j)=[j=m] i=jmss(m,i)S(i,j)=[j=m](4)

类似的可以推出
(5) ∑ i = j m S ( m , i ) s s ( i , j ) = [ j = m ] \tag 5\sum\limits_{i=j}^{m}S(m,i)s_s(i,j)=[j=m] i=jmS(m,i)ss(i,j)=[j=m](5)

有了这两个公式,考虑推斯特林反演的公式
若有
F ( n ) = ∑ i = 0 n S ( n , i ) G ( i ) F(n)=\sum\limits_{i=0}^{n}S(n,i)G(i) F(n)=i=0nS(n,i)G(i)
显然
G ( n ) = ∑ i = 0 n [ i = n ] G ( i ) G(n)=\sum\limits_{i=0}^{n}[i=n]G(i) G(n)=i=0n[i=n]G(i)
= ∑ i = 0 n G ( i ) ∑ j = i n s s ( n , j ) S ( j , i ) =\sum\limits_{i=0}^{n}G(i)\sum\limits_{j=i}^{n}s_s(n,j)S(j,i) =i=0nG(i)j=inss(n,j)S(j,i)
交换主体
= ∑ j = 0 n s s ( n , j ) ∑ i = 0 j S ( j , i ) G ( i ) =\sum\limits_{j=0}^{n}s_s(n,j)\sum\limits_{i=0}^{j}S(j,i)G(i) =j=0nss(n,j)i=0jS(j,i)G(i)
= ∑ j = 0 n s s ( n , j ) F ( j ) =\sum\limits_{j=0}^{n}s_s(n,j)F(j) =j=0nss(n,j)F(j)

反过来同理
这样斯特林反演就得证了。

你可能感兴趣的:(————斯特林数,————排列组合,学习小记,---数学)