zoukankan      html  css  js  c++  java
  • 第二类斯特林数总结

    第二类斯特林数总结

    标签: 第二类斯特林数


    最近做题的时候遇到了一些跟第二类斯特林数有关的东西,发现网上的资料不是很多,于是写一篇博客来总结一下。

    第二类斯特林数

    定义

    第二类斯特林数(S(n,m))表示的是把n个不同的小球放在m个相同的盒子里方案数。
    upd:为了看得清楚,有时候我们也用(egin {Bmatrix} n \ mend {Bmatrix})来表示(S(n,m))

    求法

    一般有两种求法。
    递推:
    (S(n,m)=S(n-1,m-1)+mS(n-1,m))
    即讨论第一个球是否单独在一个盒子里面。
    如果不独占一盒,那么把这个球放进任一个盒子,这个盒子就相当于与其他的盒子不同,那么在乘答案的时候就要多乘一个m.

    容斥原理:

    [S(n,m)={frac 1 {m!}}sum_{k=0}^m (-1)^k C(m,k)(m-k)^n ]

    即枚举空盒的个数,剩下的随意放置,由于盒子是相同的最后要除以(m!)
    注意到这个式子是一个卷积,所以可以在(O(nlogn))内求出(S(n,0),S(n,1)......)

    性质

    只有一个公式

    [n^k=sum_ { i=0}^k S(k,i)×i!×C(n,i) ]

    很好理解,左边就是k个球可以任意放置在n个盒子里。
    右边就是枚举非空盒子的数量i,那么把k个球放在i个盒子(盒子不同,需要乘上一个i!)里面再乘上选出i个非空盒子的方案数。

    有了这个东西,我们可以很方便的维护一些东西。

    组合等式推导

    upd:感觉以前写的菜爆了。。。。更新一点吧

    上面的性质与求法都是基于组合意义而来的,接下来我们采用一个具有组合意义的等式,将其通过一些变换得到上面的等式。

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

    (x^{underline k})(x)(k)次下降幂,就是(x imes (x-1) imes(x-2).... imes(x-k+1))
    (其实就是上面的性质啦)
    当然准确来说这个式子才是定义式,因为这个式子具有清晰的组合意义。
    这个式子可以方便的得到递推式:

    [sum_{k=0}^m egin{Bmatrix} m\kend{Bmatrix} n^{underline k}= sum_{k=1}^{m} egin{Bmatrix} m-1\k-1end{Bmatrix} n^{underline {k}} +sum_{k=1}^{m} kegin{Bmatrix} m-1\kend{Bmatrix} n^{underline {k}} =\ sum_{k=0}^{m-1} egin{Bmatrix} m-1\kend{Bmatrix} n^{underline {k+1}} +sum_{k=1}^{m} kegin{Bmatrix} m-1\kend{Bmatrix} n^{underline {k}} =(n-k+k)n^{m-1}=n^m]

    当然这个步骤写的不太严谨,如果把上面的式子倒过来就是正确的证明步骤,但是这样推就不太好想(不过我们已经知道了结论就随便了)。

    好像还有一个等式?

    [egin{Bmatrix} m \k end{Bmatrix}={frac 1 {k!}}sum_{i=0}^k (-1)^{k-i} inom {k} {i} i^m ]

    再来审视一下之前的定义式。

    [k^m=sum_{i=0}^k egin{Bmatrix} m \i end{Bmatrix} i! inom{k}{i} ]

    我们把(m)看作常量,令(f_i=i^m,g_i=egin{Bmatrix} m \i end{Bmatrix} i!)
    那么(inom{k}{i})相当于从(g_i)(f_k)的一个转移矩阵
    直接二项式反演,得

    [egin{Bmatrix} m \k end{Bmatrix} k!=sum_{i=0}^k (-1)^{k-i} inom {k} {i}i^m ]

    再把(k!)移过去就得到最初的式子了。

    斯特林反演

    对第二类斯特林数的反演。

    [q_n=sum_{i=1}^{n}egin{Bmatrix}n \ iend{Bmatrix}p_i Leftrightarrow p_n=sum_{i=0}^{n}(-1)^{n-i}egin{bmatrix}n \ iend{bmatrix}q_i ]

    其中(egin{bmatrix} n\ mend{bmatrix})是第一类斯特林数,也可以写作(s(n,m)),在不作特殊的说明情况的下(即(s_s(n,m))代表有符号的第一类斯特林数),本文中写到的均为无符号的第一类斯特林数。

    在这里,我们只需要知道(s(n,m))的生成函数。

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

    其实这差不多就是有符号和无符号的区别,一个是下降幂,一个是上升幂。

    我们发现,这个式子与上面第二类斯特林数的定义式出奇的像。

    [x^m=sum_{k=0}^m egin{Bmatrix} m \k end{Bmatrix} x^{underline k} quad [2] ]

    ([1])式带入([2])中,得

    [x^m=sum_{k=0}^m egin{Bmatrix} m \k end{Bmatrix} sum_{l=0}^k (-1)^{k-l}egin{bmatrix} k\lend{bmatrix} x^l \ =sum_{l=0}^m x^l sum_{k=l}^m (-1)^{k-l}egin{Bmatrix} m \k end{Bmatrix}egin{bmatrix} k\lend{bmatrix}]

    显然得到等式

    [[l=m]=sum_{k=l}^m (-1)^{k-l}egin{Bmatrix} m \k end{Bmatrix}egin{bmatrix} k\lend{bmatrix} ]

    接下来,我们将斯特林反演的两式相互带入,不难得出其等价与上式。

    值得一提的是,我们令矩阵(f_{i,j}=egin{Bmatrix} i \ j end{Bmatrix},g_{i,j}=(-1)^{i-j} egin{bmatrix} i\ j end{bmatrix})
    那么根据上面的式子,有(FG=E),即矩阵(F,G)互逆。

  • 相关阅读:
    MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B
    MicroPython实例之TPYBoardv102自动浇花系统
    Micropython实例之DIY超声波避障小车
    MicroPython支持图形化编辑了:Python Editor带你轻松玩转MicroPython
    潍坊首个小学“教育创客空间”落户呼家庄小学 萝卜(创客)教育走进小学课堂
    Micropython TPYBoard I2C的用法
    JDK5.0新特性-反射
    JDK5.0新特性-枚举
    JDK5.0新特性-泛型
    JDK5.0新特性-静态导入
  • 原文地址:https://www.cnblogs.com/gzy-cjoier/p/8426987.html
Copyright © 2011-2022 走看看