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

    CV自skyh博客

    第一类斯特林数

    定义

    (S_1(n,m))(n)个数形成(m)个环的方案数

    元素元素之间区分,环与环直接不区分

    递推公式

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

    考虑第(n)个数单独成环还是放进之前的环里就可以了

    性质

    1. 第一类斯特林数第(n)行的和等于(n!)

    (sum limits_{i=0}^negin{bmatrix}n\iend{bmatrix}=n!)

    考虑(n)个元素的排列(p),建立(i ightarrow p_i)的置换,发现会形成若干个环,这和第(n)行的第一类斯特林数的方案是一一对应的




    1. 可以用普通幂表示上升幂

    (x^{overline n}=sum limits_{i=0}^n egin{bmatrix}n\iend{bmatrix}x^i)

    证明可以通过数学归纳法:

    (n=0)时原式显然成立

    设原式在(n)时成立

    则在(n+1)时,有

    [x^{overline {n+1}}=x^{overline n}*(x+n) ]

    [x^{overline {n+1}}=sum limits_{i=0}^n egin{bmatrix}n\iend{bmatrix}x^i*(x+n) ]

    后面的式子将((x+n))乘出来,发现正好符合第一类斯特林数转移

    [x^{overline {n+1}}=sum limits_{i=0}^{n+1} egin{bmatrix}n+1\iend{bmatrix}x^i ]




    1. 用普通幂表示下降幂可以用类似的方法求出,这里给出一种更妙的求法

    首先对于普通幂 显然有(x^n=(-x)^n*(-1)^n)

    对于下降幂与上升幂同样有

    (x^{overline n}=(-x)^{underline n}*(-1)^n)

    (x^{underline n}=(-x)^{overline n}*(-1)^n)

    将该式代入(x^{overline n}=sum limits_{i=0}^n egin{bmatrix}n\iend{bmatrix}x^i)

    整理得到(x^{underline n}=sum limits_{i=0}^n egin{bmatrix}n\iend{bmatrix}(-1)^{n-i}x^i)




    同一行第一类斯特林数

    套用第二个性质可以分治(FFT)做到(nlog^2)




    第二类斯特林数

    定义

    (S_2(n,m))表示(n)个数形成(m)个集合的方案数

    其中元素与元素之间区分,集合与集合不区分

    递推公式

    (egin{Bmatrix}n\mend{Bmatrix}=egin{Bmatrix}n-1\m-1end{Bmatrix}+m*egin{Bmatrix}n-1\mend{Bmatrix})

    还是按照实际含义去考虑第(n)个数单独作为一个集合还是放进之前的集合

    性质

    1.下降幂表示普通幂

    (x^n=sum limits_{i=0}^n egin{Bmatrix}n\iend{Bmatrix}x^{underline i})

    证明(1):类似第一类斯特林数,数学归纳法

    证明(2):(x^n=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix}inom{x}{i} i!)

    考虑(x^n)的实际含义,有(n)个元素,每次有(x)个集合可选择

    所以即(x)个集合中选出(i)个集合然后将(n)个元素放入这(i)个集合,又因为第二类斯特林数中的集合是无差别的,所以要乘上(i!)

    整理可得上面式子

    2.同样代入负数形式,可以得到上升幂表示普通幂

    (x^n=sum limits_{i=0}^n egin{Bmatrix}n\iend{Bmatrix}(-1)^{n-i}x^{overline i})

    求法

    求单点第二类斯特林数:

    设将(n)个元素放入至少(x)个集合的方案数为(g_x)(也就是允许空集

    (n)个元素放入恰好(x)个集合的方案数为(f_x)(也就是不允许空集

    (g_i = i^n)

    (g_i = sum_{j=1}^{i} f_j inom{i}{j})

    根据二项式反演得到

    (f_i = sum_{j=1}^{i} g_j inom{i}{j} (-1)^{i-j})

    (f_i = sum_{j=1}^{i} j^n inom{i}{j} (-1)^{i-j})

    然后就可以(O(n))求单点第二类斯特林数的值了




    设有(n)个不同的元素,(m)个不同集合

    (g_x)为恰好x个集合为空的方案数

    (f_x)为至少x个集合为空的方案数

    (f_x=inom{m}{x}(m-x)^n)

    (f_x=sum limits_{i=x}^{m}inom{i}{x}g_i)

    二项式反演得到:

    (g_x=sum limits_{i=x}^{m}(-1)^{i-x}inom{i}{x}f_i)

    代入(x=0),得到

    (egin{Bmatrix}n\mend{Bmatrix}=frac{1}{m!}*sum limits_{i=0}^{m}(-1)^iinom{m}{i}(m-i)^n)

    发现是个卷积式,所以求一行第二类斯特林数可以(nlog_n)

    如初见 与初见
  • 相关阅读:
    Spring 在xml配置里配置事务
    Spring事务的传播行为
    Spring 自动装配;方法注入
    Spring 依赖注入(一、注入方式)
    Spring事务
    C3P0使用详解
    php 解析json失败,解析为空,json在线解析器可以解析,但是json_decode()解析失败(原)
    Linux下的crontab定时执行任务命令详解
    crontab 常见 /dev/null 2>&1 详解
    实体字符转换,同样变量密码加盐MD5后生成的加密字符串不同解决办法 (原)
  • 原文地址:https://www.cnblogs.com/HISKrrr/p/14607790.html
Copyright © 2011-2022 走看看