Loading [MathJax]/extensions/TeX/mathchoice.js

【算法专题】集合划分数(斯特林数与贝尔数)

【第二类斯特林数】

{nm}表示把1~n划分成m个非空集合的方案数,s(1,1)=1,根据最后一个数的位置易得递推公式:

{nm}={n1m1}+{n1m}m

特别的,s(0,1)=s(1,0)=0,s(0,0)=1且必须定义0^0=1

例题:【CodeForces】G. Partitions 斯特林数 利用实际含义求解

考虑容斥,当集合可空时方案数为m^n。使集合空为1,则已知集合交求集合并的补集:(注意求得排列,要消序)

\begin{Bmatrix} n\\ m \end{Bmatrix}=\frac{1}{m!}\sum_{i=0}^{m}(-1)^i*\binom{m}{i}*(m-i)^n

例题:【BZOJ】4555: [Tjoi2016&Heoi2016]求和 排列组合+多项式求逆 或 斯特林数+NTT 代入通项公式求解。

通项公式可以化为卷积的形式,可以O(n log n)求一行的斯特林数:

\begin{Bmatrix} n\\ m \end{Bmatrix}=\sum_{i=0}^{m}\frac{(-1)^i}{i!}*\frac{(m-i)^n}{(m-i)!}

顺便一提第一类斯特林数(作用不大),令\begin{bmatrix} n\\ m \end{bmatrix}表示把1~n划分成m个非空环的方案数,s(1,1)=1,根据最后一个数的位置易得:

\begin{bmatrix} n\\ m \end{bmatrix}=\begin{bmatrix} n-1\\ m-1 \end{bmatrix}+\begin{bmatrix} n\\ m \end{bmatrix}*(n-1)

 

【幂的转化】

考虑n个不同的球放入m个不同的篮子的方案数是m^n,也可以枚举非空篮子数i,转化为1~n划分成i个非空集合的方案数乘排列,即:

m^n=\sum_{i=1}^{n}\begin{Bmatrix} n\\ i \end{Bmatrix}*i!*\binom{m}{i}

这里Σ的上届应该是m,由于m^{\underline{i}}=0,i>m,所以上届可以为n(这样方便运算),后面同理。

然后发现后面部分可以化为下降幂,即:

m^n=\sum_{i=1}^{n}\begin{Bmatrix} n\\ i \end{Bmatrix}*m^{\underline{i}}

然后根据斯特林反演,还有:

m^{\underline{n}}=\sum_{i=1}^{n}(-1)^{n-i}*\begin{bmatrix} n\\ i \end{bmatrix}*m^i

顺便一提,上升幂转化为通常幂时将上面两个公式的斯特林数1和2互换之后就可以套用了。

例题:【CodeForces】932 E. Team Work 套路是通常幂转下降幂之后把斯特林数提到最前面,后面考虑处理。

这道题是后面组合数合并后转化为O(log n)计算,BZOJ2159是后面部分用变量表示,然后独立出来用树形DP做(好神奇)。 

【贝尔数】

令B(n)表示将1~n划分成非空集合的方案数,B(1)=1,根据1所在的集合大小易得通项公式:

B(n)=\sum_{i=1}^{n}\binom{n-1}{i-1}*B(n-i)

贝尔数显然是第二类斯特林数的和,即:

B(n)=\sum_{i=1}^{n}\begin{Bmatrix} n\\ i \end{Bmatrix}

 

posted @   ONION_CYC  阅读(1499)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
历史上的今天:
2017-04-05 【BZOJ】3790 神奇项链
2017-04-05 【HDU】3068 最长回文
点击右上角即可分享
微信分享提示