zoukankan      html  css  js  c++  java
  • 斯特林数和贝尔数

    斯特林数和贝尔数

    版权说明:抄写了hypoc的博客

    第一类斯特林数

    符号: (egin{bmatrix}n\mend{bmatrix})(s(n,m))

    意义: (n) 个不同球穿成 (m) 条项链的方案数。

    (n) 个球接在前面 (n-1) 个小球中某一个的后面或新开一条项链。

    递推式:

    [s(n,m)=(n-1)s(n-1,m)+s(n-1,m-1) ]

    复杂度 (O(nm))


    考虑生成函数优化。

    (i) 次选择时,有 (i-1) 中选择不创造新的项链,(1) 种选择创造新项链。写成生成函数就是

    [prod_{i=0}^{n-1} (x+i) ]

    使用分治来解决,每层再用 (FFT) 将左右两边的多项式相乘, (x^m) 的系数是 (s(n,m)) 。时间复杂度 (O(nlog^2 n))

    有些题存在 (O(nlog n )) 做法。

    第二类斯特林数

    符号: (egin{Bmatrix}n\mend{Bmatrix})(S(n,m))

    意义: (n) 个不同小球放入 (m) 个相同盒子的方案数。

    要么和前面的放一个盒子里要么新开一个。

    [S(n,m)=mS(n-1,m)+S(n-1,m-1) ]

    时间复杂度 (O(nm))


    生成函数无法加速了。考虑容斥加速。

    不妨先假设每个盒子都不一样,最后再除以 (m!)

    容斥需要计算不合理方案。空盒子即不合理。

    [egin{aligned} S(n,m)&=frac {1} {m!} sum_{i=0}^m (-1)^i {mchoose i} (m-i)^n\ &=frac {1} {m!} sum_{i=0}^m (-1)^i frac {m!} {i! (m-i)!} (m-i)^n\ &=sum_{i=0}^m frac {(-1)^i} {i!} imes frac {(m-i)^n} {(m-i)!} end{aligned} ]

    时间复杂度 (O(nlog n))

    据说是 (FFT) 搞一搞。

    斯特林数与下降幂

    一般幂转下降幂

    考虑 (x^n) 的组合意义, (n) 个不同的球放入 (x) 个不同的盒子的方案数。

    枚举有多少非空的盒子:

    [x^n=sum_{i=1}^x {xchoose i} S(n,i) i!=sum_{i=1}^x S(n,i) x^{underline i} ]

    下降幂转一般幂

    第一类斯特林数的生成函数是上升幂,即:

    [sum_{i=1}^n s(n,i) x^i=prod_{i=0}^{n-1} (x+i)=x^{overline n} ]

    如果将 ((x+i)) 替换为 ((x-i)) 那么就会求出下降幂。

    [x^{underline n} =sum_{i=1}^n (-1)^{n-i} s(n,i)x^i ]

    贝尔数

    (n) 个不同小球放在若干个相同的盒子里,问方案数。

    [B_n=sum_{i=1}^n S(n,i) ]

    递推公式:

    枚举 (i) 表示 (n-i) 个球和 (n+1) 个球在同一个盒子里,剩下的 (i) 个又有 (B_i) 种。选球花 (nchoose i)

    [B_{n+1}=sum_{i=0 }^n {nchoose i} B_i ]


    快速求 (B_i) :

    [egin{aligned} B_n&=sum_{i=1}^n S(n,i)\ &=sum_{i=1}^n sum_{j=0}^i frac {(-1)^j} {j!} imes frac {(i-j)^n} {(i-j)!}\ &=sum_{j=0}^i frac {(-1)^j} {j!} imes sum_{i=j}^n frac {(i-j)^n} {(i-j)!}\ end{aligned} ]

    (O(nlog n)) 处理 (frac {(n-i)^n} {(n-i)!}) 后缀和,(O(n)) 求出 (B_n) 即可。

    qaqaq
  • 相关阅读:
    NHibernate 转载
    net中Json对单引号和特殊字符串的处理
    C#过滤非法字符
    Linq Distinct 扩展
    (转)Windows启动过程分析预引导
    special content filetypes require specialized software to use
    存储器
    (转)MAPISendMail调用系统默认的邮件客户端发邮件
    FrameControllerModel
    (转)c++的四种类型转换
  • 原文地址:https://www.cnblogs.com/zdsrs060330/p/14619391.html
Copyright © 2011-2022 走看看