Fork me on GitHub

斯特林数什么的

斯特林数什么的

定义

第一类strling数

$\begin{bmatrix} n \\ m \end{bmatrix}$表示把$n$个数划分成$m$个环排列的方案数

递推式1

枚举最后一个点的位置

递推式2

枚举最后一个环排列的大小

第二类斯特林数

$\begin{Bmatrix} n \\ m \end{Bmatrix}$表示把$n$个数划分成$m$个无序集合的方案数

递推式1

枚举最后一个点的位置

递推式2

枚举最后一个集合的大小

特殊表达形式

性质

公式1(下降幂转次幂)

证明如下:

比较简单,直接考虑怎么算出$x^k$项的系数就可以了,省略

公式2(次幂转下降幂)

也可以转换成组合数和阶乘的形式

公式3

证明如下:

将公式2代入公式1

得到:

交换和号得:

显然当$n = m$的时候$\sum_{k = m} ^ n (-1)^{n - k}\begin{bmatrix} n \\ k \end{bmatrix} \begin{Bmatrix} k \\ m \end{Bmatrix}$是1

所以有:

因为对于任意的x上面的式子都成立,所以可以得到当$n\not= m$的时候$\sum_{k = m} ^ n (-1)^{n - k}\begin{bmatrix} n \\ k \end{bmatrix} \begin{Bmatrix} k \\ m \end{Bmatrix}$是0

公式4

证明如下:

将公式1代入公式2

得到:

交换和号得:

显然当$n = m​$的时候$\sum_{k = m} ^ n \begin{Bmatrix} n \\ k \end{Bmatrix}\begin{bmatrix} k \\ m \end{bmatrix} (-1)^{k - m}​$是1

所以有:

因为对于任意的x上面的式子都成立,所以可以得到当$n\not= m​$的时候$\sum_{k = m} ^ n \begin{Bmatrix} n \\ k \end{Bmatrix}\begin{bmatrix} k \\ m \end{bmatrix} (-1)^{k - m}​$是0

ps:

当然$(-1)^{k - m}$和$(-1)^{n - k}$没有任何区别

因为$n - m$是偶数的时候,没有影响

$n - m$是奇数的时候,相当于全体取负,不影响结论

公式5

证明如下:

因为一个环排列对应着一个置换,然后一个置换又可以差分成很多的环排列,所以假设前$n$个数分成了$k$个环排列,并且这k个环排列中有$m$个不变,剩下的$k - m$个和新的环排列组合起来变成一个完整的环排列,也就是第$m+1$个环排列

公式6

证明如下:

假设不和当前数在同一个集合里面的数是k个,所以这k个数会分成m个集合,然后再用组合数算一算和当前数在一个集合的数的方案数

公式7

其实就是第一类斯特林数的递推式2的化简版本,组合意义一模一样

公式8

证明如下:

考虑第k+1个数是第一个被放进第m+1个集合中的数

所以前k个数会被放进m个集合中,并且还有$(m+1)^{n - k}$个数可以随便放

公式9(斯特林反演)

对于:

有:

反之亦然

证明可以直接带入然后用公式3和公式4进行理解

简单运用

第一类斯特林数求行方法

假设需要求第一类斯特林数第n行

首先有:

就是下降幂换成上升幂,过程不变是是没有符号了,和公式1同理

那么也就是说$x^{\overline{n}}$是第n行斯特林数的生成函数

然后可以用$O(n\log^2 n)$的时间分治fft来算

也可以用$O(n\log n)$的倍增算法

然后$f_n(x+n)$实际上就是把$f_n(x)$的各项$x^k$换成$(x+n)^k$

可以用二项式系数展开并且用$O(n\log n)$时间卷积求出

第二类斯特林数求行方法

实际上就是第二类斯特林数的特殊表达形式

发现没有其实这是一个卷积:

然后可以直接卷积算出来了