• 关于斯特林数


    第一类斯特林数

    定义

    $S_1(n,m)$表示$n$个元素,形成$m$个环的方案数,记作$egin{bmatrix}n\mend{bmatrix}$。

    其中每个元素是不同的,每个环是相同的。

    递推公式

    从实际含义上去考虑,第一类斯特林数递推公式为:

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

    分别对应形成新的环,方案数即$egin{bmatrix}n-1\m-1end{bmatrix}$。

    接在原来的一个环中一个元素的后面,方案数即$(n-1)*egin{bmatrix}n-1\mend{bmatrix}$

    一些简单性质

    1.第一类斯特林数第$n$行的和为$n!$,即

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

    考虑$n!$,表示$n$个元素的排列。建立$i ightarrow p_i$的置换,显然会形成若干个环。

    这与第一类斯特林数在第$n$行的的一种方案是一一对应的。

    2.第一类斯特林数的一个用途是用通常幂表示上升幂,有

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

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

    当$n=0$,原式$x^{overline 0}=1=x^0$显然成立。

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

    设原式在$n$时成立,只要证原式在$n+1$时也成立。

    左右同乘$x+n$可得,$x^{overline n+1}=x^{overline n}*(x+n)$

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

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

    3.对于通常幂,显然有$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$

    求法

    对于同一行第一类斯特林数的求解,可以直接利用第二个性质。

    对$x^{overline n}$做分治$fft$即可。

    这个做法的复杂度是$O(nlog^2n)$的,可以用一些做法优化到一个log,待补。

    第二类斯特林数

    定义

    $S_2(n,m)$表示$n$个元素,形成$m$个集合的方案数,记作$egin{Bmatrix}n\mend{Bmatrix}$。

    其中每个元素是不同的,每个集合是相同的。

    递推公式

    从实际含义上去考虑,第二类斯特林数递推公式为:

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

    分别对应形成新的集合,方案数即$egin{Bmatrix}n-1\m-1end{Bmatrix}$。

    加入任意一个已有的集合,方案数即$m*egin{Bmatrix}n-1\mend{Bmatrix}$

    一些简单性质

    1.第二类斯特林数的一个用途是用下降幂表示通常幂,有

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

    证明(1) 通过数学归纳法,与第一类斯特林数的证明类似,这里略过。

    证明(2) 考虑$x^n$的实际含义,将$n$个不同元素放入$x$个不同集合中。

    有$x^n=sum_{i=0}^negin{Bmatrix}n\iend{Bmatrix}inom{x}{i} i!$

    因为第二类斯特林数中的集合是无差别的,所以最后应当乘上$i!$。

    整理上式可得要证的式子,实际上这个含有组合数的公式也是有时候要化成的形式。

    2.同样代入负数形式,可得用上升幂表示通常幂的形式,即

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

    求法

    单点求解第二类斯特林数存在一种$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$

    拆一拆就发现这个玩意是个卷积式,所以求同一行第二类斯特林数可以做到$O(nlogn)$。

  • 相关阅读:
    增强for循环用法___ArrayList数组实现使用下标最好,LinkedList使用增强型的(转载)
    Java类加载的时机_4种主动引用会触犯类加载+剩下的被动引用不会触发类的加载
    剑指offer_面试题11 数值的整数次方_考察代码的完整性
    深入理解Java虚拟机博客参考目录
    GPU总结(1)
    牛客_Java_值传递(拷贝)不该表原来变量+传引用的话会一起改变
    Java 源码学习线路————_先JDK工具包集合_再core包,也就是String、StringBuffer等_Java IO类库
    centos7 安装jdk1.8
    JPA
    javaScript获取url中的参数
  • 原文地址:https://www.cnblogs.com/skyh/p/12020505.html
Copyright © 2020-2023  润新知