毒瘤~~(第二类斯特林数及其相关公式)
Posted 。✧* ꧁王者꧂✧*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了毒瘤~~(第二类斯特林数及其相关公式)相关的知识,希望对你有一定的参考价值。
\\;\\;\\;
先提出一个问题:将n个不同小球划分为k个集合的方案数是多少?(集合不为空)。
\\;\\;\\;
或者,这个问题还可以表述为这种形式:将n个不同小球放入k个相同盒子的方案数。
\\;\\;\\;
实际上,斯特林数的实际含义就是这么个问题。
\\;\\;\\;
我们设
s
(
i
,
j
)
s(i,j)
s(i,j)表示将
i
i
i个小球划分为
j
j
j集合的方案数。
\\;\\;\\;
先给出递推式:
\\;\\;\\;
s
(
i
,
j
)
=
s
(
i
−
1
,
j
)
∗
j
+
s
(
i
−
1
,
j
−
1
)
s(i,j)=s(i-1,j)*j+s(i-1,j-1)
s(i,j)=s(i−1,j)∗j+s(i−1,j−1)
\\;\\;\\;
乍一看,是不是和组合数的递推公式有些像?
\\;\\;\\;
其实,二者都是利用杨辉三角的思想来推出的式子。
\\;\\;\\;
具体含义如下:我们已求出
s
(
i
−
1
,
.
.
.
)
s(i-1,...)
s(i−1,...),即将
i
−
1
i-1
i−1个不同小球分为
.
.
.
...
...个集合的方案数。
\\;\\;\\;
当前我们要考虑第
i
i
i个球,有两种放置的方法:
\\;\\;\\;
1.
1.
1. 单独将第
i
i
i个小球放入一个新集合;对应递推式中的
s
(
i
−
1
,
j
)
∗
j
s(i-1,j)*j
s(i−1,j)∗j,意为将第
i
i
i个球放入
\\;\\;\\;
已存在的
j
j
j个集合中,有
j
j
j种放法。
\\;\\;\\;
2.
2.
2. 将第
i
i
i个小球放入已存在的集合中。对应递推式中的
s
(
i
−
1
,
j
−
1
)
s(i-1,j-1)
s(i−1,j−1),意为已存在
j
−
1
j-1
j−1
\\;\\;\\;
个集合,我们要再开一个集合来放置第
i
i
i个小球。
\\;\\;\\;
以上便是斯特林数的递推式。
\\;\\;\\;
但我们不仅仅要掌握斯特林数的递推式,因为有些时候,题目中的
n
n
n和
k
k
k会很大,用递推显
\\;\\;\\;
然不可行,而我们只需要用到很少次数的斯特林数,这时就要考虑直接求某一项斯特林数了。
\\;\\;\\;
s
(
n
,
k
)
=
1
k
!
∑
i
=
0
k
(
−
1
)
i
(
k
i
)
(
k
−
i
)
n
s(n,k)=\\frac{1}{k!}\\sum_{i=0}^{k}{(-1)^i \\tbinom{k}{i}(k-i)^n}
s(n,k)=k!1∑i=0k(−1)i(ik)(k−i)n,严格证明要用到二项式反演,这里不过多赘述
\\;\\;\\;
但是我们可以感性理解一下(滑稽~)。大家想一下,这个式子表示什么含义:
\\;\\;\\;
∑
i
=
0
k
(
−
1
)
i
(
k
i
)
(
k
−
i
)
n
\\sum_{i=0}^{k} {(-1)^i\\tbinom{k}{i}(k-i)^n}
∑i=0k(−1)i(ik)(k−i)n,实际上,这个式子的答案是就等于将n个不同小球放入k个不
\\;\\;\\;
同盒子的方案数,思想为容斥原理。而我们要求的是将n个小球放入k个相同盒子的方案
\\;\\;\\;
数。那么,这两者之间其实就是排列数和组合数之间的关系,后者因为不考虑盒子的异
\\;\\;\\;\\;
同,所以其每一种方案在前者中都会因考虑盒子的异同而重复
k
!
k!
k!次,所以再乘上
1
k
!
\\frac{1}{k!}
k!1,就得到
\\;\\;\\;
s
(
n
,
k
)
=
1
k
!
∑
i
=
0
k
(
−
1
)
i
(
k
i
)
(
k
−
i
)
n
s(n,k)=\\frac{1}{k!}\\sum_{i=0}^{k}{(-1)^i \\tbinom{k}{i}(k-i)^n}
s(n,k)=k!1∑i=0k(−1)i(ik)(k−i)n。
\\;\\;\\;
除此之外,我们还常常会用到一个式子:
\\;\\;\\;
x
n
=
∑
k
=
0
n
s
(
n
,
k
)
C
(
x
,
k
)
k
!
x^n=\\sum_{k=0}^{n}s(n,k)C(x,k)k!
xn=∑k=0ns(n,k)C(x,k)k!,
x
n
x^n
xn意为将n个球放入x个不同盒子,且盒子可以为空的总方案数:枚举非空盒子的数目,将n个球分为k个集合,放入这k个盒子中。
\\;\\;\\;
!
!
!
!!!
!!!记住,此公式非常重要,是我们将一个恶心公式转换为含斯特林数的较简单公式的非常实用的式子。
\\;\\;\\;
最后再献上一个较实用的转换公式:
C
(
n
,
i
)
A
(
i
,
j
)
=
C
(
n
−
j
,
i
−
j
)
A
(
n
,
j
)
C(n,i)A(i,j)=C(n-j,i-j)A(n,j)
C(n,i)A(i,j)=C(n−j,i−j)A(n,j),用组合数和排列数的公式就可以证出来,配合斯特林数食用非常
香
香
香。
\\;\\;\\;
奉上一坨递推求斯特林数的代码:
s[0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
s[i][j]=s[i-1][j]*j+s[i-1][j-1];
}
推荐一道好题:
cash的文明世界
以上是关于毒瘤~~(第二类斯特林数及其相关公式)的主要内容,如果未能解决你的问题,请参考以下文章
[HEOI2016/TJOI2016]求和——第二类斯特林数
BZOJ 4555[Tjoi2016&Heoi2016]求和 NTT+第二类斯特林数