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

    第二类斯特林数

    比起第一类斯特林数,第二类斯特林数更为常用。

    (egin{Bmatrix}n\mend{Bmatrix}) 表示将 (n) 个带标号球放入 (m) 个无标号盒子(非空)的方案数。

    有递推式:(考虑第 (n) 个球放到哪里)

    [egin{Bmatrix}n\mend{Bmatrix} = egin{Bmatrix}n-1\m-1end{Bmatrix} + megin{Bmatrix}n-1\mend{Bmatrix} ]

    通过这个递推式,我们可以用 (O(n^2)) 的时间计算出所有第二类斯特林数。

    通过考虑无标号球无标号盒子与第二类斯特林数的关系可以得到下面的式子:

    [m^n = sum_{k}{mchoose k} egin{Bmatrix}n\kend{Bmatrix} k! ]

    即:

    [m^n = sum_{k}egin{Bmatrix}n\kend{Bmatrix}m^{underline{k} } ]

    可以用于普通幂转下降幂。

    发现有些像二项式反演,于是可以上反演:

    [m^n = sum_{k}{mchoose k} egin{Bmatrix}n\kend{Bmatrix} k!\ egin{Bmatrix}n\mend{Bmatrix}m! = sum_{k}(-1)^{m-k} {m choose k} k^n\ egin{Bmatrix}n\mend{Bmatrix} = sum_{k}frac{k^n}{k!} frac{(-1)^{m-k}}{(m-k)!} ]

    发现是个卷积形式,于是可以 (O(n log n)) 求出一行的斯特林数。

    如果想要求一列的话需要用到生成函数。

    [egin{aligned} F_k(x)&=sum_{i} egin{Bmatrix}i\kend{Bmatrix}x^i\ &= sum_i egin{Bmatrix}i-1\k-1end{Bmatrix}x^i + ksum_i egin{Bmatrix}i-1\kend{Bmatrix}x^i\ &= xsum_i egin{Bmatrix}i\k-1end{Bmatrix}x^i + xksum_i egin{Bmatrix}i\kend{Bmatrix}x^i\ &= xF_{k-1}(x) + xkF_k(x) end{aligned} ]

    于是:

    [egin{aligned} F_k(x) &= frac{x}{1-kx}F_{k-1}(x)\ &= frac{x}{1-kx} imes frac{x}{1-(k-1)x} imes ... imes frac{x}{1-x}\ &= frac{x^k}{prod_{i=1}^k (1-ix)} end{aligned} ]

    (由于边界为 (F_0(x) = 1)

    分子就是将多项式向右平移 (k)。分母可以用分治+NTT+求逆做到 (O(n log^2 n))

    第一类斯特林数

    (egin{bmatrix}n\mend{bmatrix}) 表示 (n) 个有标号元素形成 (m) 个圆排列(环)的方案数。

    有递推式:(考虑最后一个球跟在谁后面)

    [egin{bmatrix}n\mend{bmatrix} = egin{bmatrix}n-1\m-1end{bmatrix} + (n-1)egin{bmatrix}n-1\mend{bmatrix} ]

    它和第一类斯特林数有个类似的式子:

    [x^{overline{m}} = sum_{k}egin{bmatrix}m\kend{bmatrix} x^k ]

    是不是有些像生成函数?于是可以用分治+NTT来 (O(n log^2 n)) 求一行第二类斯特林数。

    斯特林反演

    有一个这样的式子:

    [f(m) = sum_{k}egin{Bmatrix}m\kend{Bmatrix} g(k)\ Leftrightarrow g(m) = sum_{k}egin{bmatrix}m\kend{bmatrix}f(k)(-1)^{m-k} ]

    证明需要用到反转公式

    于是有了普通幂转阶乘幂的又两个式子:

    [x^m = sum_{k}(-1)^{m-k} egin{Bmatrix}m\kend{Bmatrix} x^{overline{k}}\ x^{underline{m}} = sum_k (-1)^{m-k} egin{bmatrix}m\kend{bmatrix} x^k ]

  • 相关阅读:
    [HNOI 2015]菜肴制作
    [HNOI 2015]落忆枫音
    [NOIp 2009]靶形数独
    [HNOI 2010]Bounce 弹飞绵羊
    [CTSC 1999]拯救大兵瑞恩&[网络流24题]孤岛营救问题
    [SDOI 2008]Cave 洞穴勘测
    pandas 5 str 参考:https://mp.weixin.qq.com/s/Pwz9iwmQ_YQxUgWTVje9DQ
    比较工具
    当小内存遇上大量数据,你该怎么解决这个问题?
    python高性能编程 读书笔记
  • 原文地址:https://www.cnblogs.com/JiaZP/p/14162592.html
Copyright © 2011-2022 走看看