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
i−1个元素,若放入了
j
−
1
j-1
j−1个集合,那么这个元素肯定是新开一个集合,所以等于
S
(
i
−
1
,
j
−
1
)
S(i-1,j-1)
S(i−1,j−1)
若已经放入了
j
j
j个集合,那么这个元素在前面所有元素中选一个放入,就是
S
(
i
−
1
,
j
)
∗
j
S(i-1,j)*j
S(i−1,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(n−1,m)∗m+S(n−1,m−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=0∑mS(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=0∑mPmiS(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(n−1,m−1)+(n−1)su(n−1,m−1)
即考虑新的这个元素是成一个圆环还是插在前面某一个元素的左边。
第一类斯特林数还有另一种定义方式
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+m−1m=x(x+1)(x+2)...(x+m−1)=i=0∑msu(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(x−1)(x−2)...(x−m+1)=i=0∑mss(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)m−i
联系这两个形式可以通过归纳得到,此处不再赘述。
根据上面两个式子,第一类斯特林数可以用分治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=0∑nS(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=0∑nss(n,i)F(i)=i=0∑n(−1)n−isu(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=0∑mss(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=0∑xS(m,i)xi↓=i=0∑mS(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=0∑mss(m,i)j=0∑iS(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=0∑mxj↓i=j∑mss(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=j∑mss(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=j∑mS(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=0∑nS(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=0∑n[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=0∑nG(i)j=i∑nss(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=0∑nss(n,j)i=0∑jS(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=0∑nss(n,j)F(j)
反过来同理
这样斯特林反演就得证了。