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

【第二类斯特林数】

令$\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-1\\ m \end{Bmatrix}*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 @ 2018-04-05 13:50  ONION_CYC  阅读(...)  评论(...编辑  收藏