第一类Stirling数:
stir(n,k)
s
t
i
r
(
n
,
k
)
表示
n
n
个元素安排成个轮换的方式数。
注意这里是
k
k
个轮换,而不是个子集。
轮换可以理解为循环排列,即认为
前几项:
stir(0,0)=1
s
t
i
r
(
0
,
0
)
=
1
stir(n,0)=0
s
t
i
r
(
n
,
0
)
=
0
(n>=1)
(
n
>=
1
)
stir(1,1)=1
s
t
i
r
(
1
,
1
)
=
1
stir(2,1)=1
s
t
i
r
(
2
,
1
)
=
1
stir(2,2)=1
s
t
i
r
(
2
,
2
)
=
1
….
递推:
对递推的理解:
在 k k 个轮换中,个元素的每一种排列,要么把最后一个元素单独作为一个轮换(共有 stir(n−1,k−1) s t i r ( n − 1 , k − 1 ) 种方式),要么把这个元素插入前 n−1 n − 1 个元素的 stir(n−1,k) s t i r ( n − 1 , k ) 种轮换排列的一个中,共有 n−1 n − 1 种不同方式插入。(如在轮换 [A,B,C] [ A , B , C ] 中插入新的元素 D D ,只能形成这三种方式,没有别的可能性)
第二类Stirling数: stir2(n,k) s t i r 2 ( n , k ) 表示把 n n 个事物的集合划分为个非空子集的方式数。
前几项:
stir2(0,0)=1
s
t
i
r
2
(
0
,
0
)
=
1
stir2(n,0)=0
s
t
i
r
2
(
n
,
0
)
=
0
(n>=1)
(
n
>=
1
)
stir2(1,1)=1
s
t
i
r
2
(
1
,
1
)
=
1
递推:
对递推的理解:
把 n n 个元素分为个非空部分,对于最后一个元素,要么单独放入一类(共有 stir2(n−1,k−1) s t i r 2 ( n − 1 , k − 1 ) 种方式),要么把它和前 n−1 n − 1 个元素的某个非空子集放在一起。(共有 k∗stir2(n−1,k) k ∗ s t i r 2 ( n − 1 , k ) 种方法)
几个例题:
很显然的第一类Stirling数,关键在于对第一个房间的处理。
只有当第一个房间单独形成一个轮换的时候才必须破坏第一个房间的门,因此减去这些情况即可。
按中间最高的房子把房子分开,左边有F-1个,右边有B-1个,可以看成先把最高的拿出来,剩下的N-1个形成F-1+B-1个轮换,再从这F+B-2个轮换中选F-1个放到左边去。
n个人最少会有一种分数,最多会有n种分数,因此联想到第二类Stirling数,把n个人分成i类,再乘以i的全排列加起来就行。