• 第二类斯特林数小记


    第一类斯特林数没弄懂,先咕了。

    对于第二类斯特林数记做 (egin{Bmatrix}n\ mend{Bmatrix}),也可记做 (S(n,m)),表示将 (n) 个两两不同的元素,划分到 (m) 个互不区分的非空集合的方案数。

    递推式

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

    边界是 (egin{Bmatrix}n\ 0end{Bmatrix}=[n=0])

    证明:

    新插入一个元素时,有两种方案:

    • 将新元素放进一个新集合里,方案数为 (egin{Bmatrix}n-1\ m-1end{Bmatrix})
    • 将新元素放进一个原来有的集合里,方案数为 (m×egin{Bmatrix}n-1\ mend{Bmatrix})

    最后用加法原理相加即可。

    通项公式

    (egin{Bmatrix}n\ mend{Bmatrix}=frac{1}{m!}sum_{i=0}^m(-1)^{m-i} binom{m}{i}i^n)

    简单理解就是每次钦定有多少个集合有元素,再容斥一下解决,最后因为无序,再除以个 (frac{1}{m!})

    证明:

    证明采取二项式反演,设 (f(i)) 为将 (n) 个元素划分成 (i) 个两两不同的集合的方案数(允许有空集),(g(i)) 为将 (n) 个元素划分成 (i) 个两两不同的非空集合的方案数(不允许有空集)

    易得

    [f(i)=i^n\ f(i)=sum_{j=0}^i binom{i}{j}g(j) ]

    那么反演一下:

    [g(i)=sum_{j=0}^i(-1)^{i-j} binom{i}{j}f(j)\ g(i)=sum_{j=0}^i(-1)^{i-j} binom{i}{j}j^n ]

    根据定义可得 (frac{1}{m!}g(m)=egin{Bmatrix}n\ mend{Bmatrix})

    那么更常用的一种写法是

    [egin{Bmatrix}n\ iend{Bmatrix}=frac{1}{i!}sum_{j=0}^ifrac{(-1)^{i-j}j^ni!}{j!(i-j)!}\ egin{Bmatrix}n\ iend{Bmatrix}=sum_{j=0}^ifrac{(-1)^{i-j}j^n}{j!(i-j)!} ]

    一种技巧就是设 (f_i=frac{(-1)^i}{i!})(g_i=frac{i^n}{i!}),然后

    [egin{Bmatrix}n\ mend{Bmatrix}=sum_{i=0}^mf_i*g_{m-i} ]

    (NTT) 优化一下。

    有一个应用:

    [m^n=sum_{i=0}^{min(n,m)}egin{Bmatrix}n\ iend{Bmatrix}inom{m}{i}i! ]

    证明:(m^n) 可以理解为 (n) 个物品放到 (m) 个不同的盒子里,而后面的式子意思就是枚举 (i) 个盒子有数,然后从 (m) 个盒子中选出 (i) 个进行全排列,意思是等价的。

  • 相关阅读:
    C#中标准Dispose模式的实现
    TcpListener 示例
    TCP/IP详解学习笔记
    TCP跟UDP乱侃
    Opencv 2.4.10 +VS2010 项目配置记录
    字符串作业及默写
    Flask 中的 Render Redirect HttpResponse
    运算符和编码作业及默写
    初识 Python 作业及默写
    初识 Python
  • 原文地址:https://www.cnblogs.com/nanfeng-blog/p/15233181.html
Copyright © 2020-2023  润新知