zoukankan      html  css  js  c++  java
  • 从零开始的斯特林数问题

    全力施工中。

    update:基础部分已完成,缺少例题。

    第一类斯特林数

    定义

    轮换斯特林数(s(n,m)=egin{bmatrix}n\mend{bmatrix})表示将n个元素分成为m个环的方案数。

    递推式 (s(n,m)=s(n-1,m-1)+(n-1)s(n-1,m)),边界(s(0,0)=1)

    性质

    [egin{aligned} &sum_{i=0}^ns(n,i)=n!\ &sum_{i=0}^ns(n,i)(-1)^i=0(nge2)\ &sum_{i=0}^ns(n,i)x^i=x^{overline{n}}\ &sum_{i=0}^ns(n,i)(-1)^{n-i}x^i=x^{underline{n}} end{aligned} ]

    证明自行操作。

    母函数

    设它的母函数为(G_n(x)),易知

    [G_n(x)=x^overline{n}=prod_{i=0}^{n-1}(x+i)\ G_{2n}(x)=prod_{i=0}^{n-1}(x+i)prod_{i=0}^{n-1}(n+x+i)=G_n(x)G_n(x+n)\ G_{2n}(x+1)=prod_{i=0}^{n-1}(x+i)prod_{i=0}^{n-1}(n+x+i)=(x+n-1)G_n(x)G_n(x+n)\ ]

    其中

    [egin{aligned} G_n(x+n)&=sum_{i=0}^n s(n,i)(x+n)^i\ &=sum_{i=0}^ns(n,i)sum_{j=0}^iC(i,j)n^{i-j}x^j\ &=sum_{i=0}^ns(n,i)sum_{j=0}^nfrac{i!}{j! imes (i-j)!}n^{i-j}x^j\ &=sum_{j=0}^nfrac{x^j}{j!}sum_{i=0}^ns(n,i) imes i! imesfrac{n^{i-j}}{(i-j)!} end{aligned} ]

    于是快速地从(G_n(x))得到(G_n(x+n))。(参考附录)

    因此采取分治策略计算(G_n(x)),复杂度与多项式求逆相近,为(O(nlog n))

    第二类斯特林数

    定义

    子集斯特林数(S(n,m)=egin{Bmatrix}n\mend{Bmatrix})表示将n个元素分成m个组的方案数。

    递推式 (S(n,m)=S(n-1,m-1)+mS(n-1,m)),边界(S(0,0)=1)

    性质

    [egin{aligned} &sum_{i=0}^mS(n,i) imes i! imes C(m,i)=m^n\ &S(n,m)=frac{1}{m!}sum_{i=0}^m(-1)^iC(m,i)(m-i)^n\ &sum_{i=0}^ni^m=sum_{i=0}^mfrac{(n+1)^{underline{i+1}}S(m,i)}{i+1} end{aligned} ]

    前两点自行脑补,下面用前两点推导第三点

    [sum_{i=0}^ni^m =sum_{i=0}^nsum_{j=0}^iS(m,j) imes j! imes C(i,j) =sum_{i=0}^nsum_{j=0}^mS(m,j) imes j! imes C(i,j)\ =sum_{j=0}^mS(m,j) imes j!sum_{i=0}^nC(i,j) =sum_{j=0}^mS(m,j) imes j! imes C(n+1,j+1)\ =sum_{j=0}^mfrac{S(m,j) imes j! imes (n+1)!}{(j+1)! imes (n-j)!} =sum_{i=0}^mfrac{(n+1)^{underline{i+1}}S(m,i)}{i+1} ]

    母函数

    设它的母函数为(G_n(x)),易知

    [egin{aligned} G_n(x)&=sum_i S(n,i)x^i\ &=sum_ifrac{1}{i!}sum_{j=0}^i(-1)^jC(i,j)(i-j)^nx^i\ &=sum_isum_jfrac{(-1)^j(i-j)^n}{j!(i-j)!}x^i\ &=(sum_{i=0}frac{(-1)^i}{i!}x^i)(sum_{i=0}frac{i^n}{i!}x^i) end{aligned} ]

    就很好做了似乎。

    斯特林反演

    定义

    [f(n)=sum_{i=0}^n S(n,i)g(i) Leftrightarrow g(n)=sum_{i=0}^n(-1)^{n-i}s(n,i)f(i) ]

    推导

    结合幂、阶乘幂的变换

    [egin{aligned} m^underline n &=sum_{i=0}^ns(n,i)(-1)^{n-i}m^i\ &=sum_{i=0}^ns(n,i)(-1)^{n-i}sum_{j=0}^m S(i,j) imes j! imes C(m,j)\ &=sum_{i=0}^ns(n,i)(-1)^{n-i}sum_{j=0}^m S(i,j) imes m^underline j\ &=sum_{i=0}^ns(n,i)(-1)^{n-i}sum_{j=0}^n S(i,j) imes m^underline j\ &=sum_{j=0}^nm^underline jsum_{i=0}^n(-1)^{n-i}s(n,i)S(i,j)\ end{aligned} ]

    可知等式

    [sum_{i=m}^n(-1)^{n-i}s(n,i)S(i,m)=sum_{i=0}^n(-1)^{n-i}s(n,i)S(i,m)=[n=m] ]

    类似地也能得等式

    [sum_{i=m}^n(-1)^{n-i}S(n,i)s(i,m)=sum_{i=0}^n(-1)^{n-i}S(n,i)s(i,m)=[n=m] ]

    于是先证从左到右

    [egin{aligned} g(n)&=sum_{i=0}^n(-1)^{n-i}s(n,i)sum_{j=0}^i S(i,j)g(j)\ &=sum_{i=0}^n(-1)^{n-i}s(n,i)sum_{j=0}^n S(i,j)g(j)\ &=sum_{j=0}^n g(j)sum_{i=0}^n(-1)^{n-i}s(n,i)S(i,j)\ &=g(n) end{aligned} ]

    类似地也能证明从右到左。

    附录

    上升阶乘幂(x^{overline{n}}=frac{(x+n-1)!}{(x-1)!}),下降阶乘幂(x^{underline{x}}=frac{x!}{(x-n)!}),两者的关系是(x^{overline{n}}=(-1)^nx^{underline{n}})(x^{underline{n}}=(-1)^nx^{overline{n}})

    递推式的参考

    母函数的参考

    一类卷积的处理

    问题:已知(A(x)=sum_{i=0}^n a_ix^i), (B(x)=sum_{i=0}^n b_ix^i),求解(C(x)=sum_{i=0}^nx^i(sum_{j=i}^na_jb_{j-i}))

    做法:设对于(P(x)=sum_{i=0}^np_ix^i)(P_r(x)=sum_{i=0}^np_{n-i}x^i),则

    [egin{aligned} C_r(x)&=sum_{i=0}^nx^i(sum_{j=n-i}^na_jb_{j-(n-i)})\ &=sum_{i=0}^nx^i(sum_{j=0}^ia_{j+(n-i)}b_j)\ &=sum_{i=0}^nx^i(sum_{j=0}^iA(x)_{j+(n-i)}B(x)_j)\ &=sum_{i=0}^nx^i(sum_{j=0}^iA_r(x)_{i-j}B(x)_j)\ &=A_r(x)B(x) end{aligned} ]

    习题

    [CF960G] Bandit Blues - 求第一类斯特林数 题解

  • 相关阅读:
    JavaWeb学习总结(十三)——使用Session防止表单重复提交
    JavaWeb学习总结(十二)——Session
    eclipse中复制servlet导致tomcat启动不了的问题
    javaweb学习总结(十一)——使用Cookie进行会话管理
    EL表达式
    request.getParameter() 和request.getAttribute() 区别
    javaweb学习总结(十)——HttpServletRequest对象(一)
    javaweb学习总结(九)—— 通过Servlet生成验证码图片
    javaweb学习总结(八)——HttpServletResponse对象(二)
    javaweb学习总结(七)——HttpServletResponse对象(一)
  • 原文地址:https://www.cnblogs.com/nosta/p/10970388.html
Copyright © 2011-2022 走看看