斯特林数学习笔记

定义

第一类斯特林数\(s(n,m)\)表示把\(n\)个不同元素放到\(m\)个相同圆排列里的方案数。

有转移方程:

\[s(n,m)=s(n-1,m-1)+(n-1)\times s(n-1,m) \]

第二类斯特林数\(S(n,m)\)表示把\(n\)个不同元素放到\(m\)个相同集合里的方案数。

有转移方程:

\[S(n,m)=S(n-1,m-1)+m\times S(n-1,m) \]

还有一些我自己的定义:

\(x\)\(n\)次下降幂\(x_{(n)}=\prod_{i=0}^{n-1} (x-i)\)

\(x\)\(n\)次上升幂\(x^{(n)}=\prod_{i=0}^{n-1} (x+i)\)

(只是因为我不会LaTeX写这东西而已)

求法

第一类斯特林数

求一行

有一个式子:

\[\sum_{k=0}^n s(n,k)x^k=\prod_{i=0}^{n-1}(x+i)=x^{(n)} \]

利用数学归纳法来证明:

\[\begin{align*} &x^{(n+1)}\\ =&(x+n)\sum_{i=0}^n s(n,i)x^i\\ =&\sum_{i=0}^{n+1}(s(n,i-1)+n\times s(n,i))x^i\\ =&\sum_{i=0}^{n+1}s(n+1,i)x^i \end{align*} \]

直接暴力分治FFT可以做到\(O(n\log^2 n)\),但还可以更好。

\[F_n(x)=\prod_{i=0}^{n-1}(x+i)=x^{(n)} \]

由于\(F_{2n}(x)=F_n(x)F_n(x+n)\),所以求解\(F_{2n}(x)\)时,可以先求出

\[F_n(x)=\sum_{i=0}^n a_ix^i \]

那么就有

\[\begin{align*} F_n(x+n)&=\sum_{i=0}^n a_i(x+n)^i\\ &=\sum_{i=0}^n a_i\sum_{k=0}^i x^kn^{i-k}{i\choose k}\\ &=\sum_{k=0}^nx^k\frac{1}{k!}\sum_{i=k}^n a_i i!n^{i-k}\frac 1{(i-k)!} \end{align*} \]

后面显然是个卷积的形式,可以FFT求出来。

两边都有之后就可以乘在一起了。复杂度\(O(n\log n)\)

求一列

同样是生成函数,把\(n\)个球丢进一个圆排列的方案数的质数生成函数是

\[\sum_{n>0} (n-1)!\frac{1}{n!}x^n \]

那么丢进\(m\)个无序圆排列就是

\[\frac 1 {m!}(\sum_{n>0} (n-1)!\frac{1}{n!}x^n)^m \]

然后多项式快速幂。

第二类斯特林数

求一行

由组合意义可得

\[n^m=\sum_{k=0}^m k!{n\choose k} S(m,k) \]

等价于

\[n^m=\sum_{k=0}^n k!{n\choose k} S(m,k) \]

二项式反演,得

\[k!S(m,k)=\sum_{i=0}^k i^m(-1)^{k-i}{k\choose i} \]

(上式直接容斥也可以得到相同结果)

可以发现展开之后就是一个卷积,暴力FFT即可。

求一列

等价于分成\(m\)个集合不变,丢\(n\)个球进去,使得集合非空。

考虑\(n\)个球放入一个集合中的方案数的指数生成函数,就是

\[\sum_{n} [n\ne 0]\frac{1}{n!}x^n \]

也就是

\[e^x-1 \]

那么\(m\)个不同集合,生成函数就是

\[(e^x-1)^m \]

由于集合无序,所以变成

\[\frac 1 {m!}(e^x-1)^m \]

然后可以多项式快速幂。

斯特林反演

这里丢个式子,并不打算证明qwq

\[f_n=\sum_{k=0}^n s(n,k)g_k\Leftrightarrow g_n=\sum_{k=0}^n (-1)^{n-k}S(n,k)f_k \]

斯特林数与上升、下降、普通幂的关系

首先有上升下降幂之间的转化:

\[x^{(n)}=(-1)^n (-x)_{(n)}\\ x_{(n)}=(-1)^n(-x)^{(n)} \]

较为显然,不证明。

然后有上面一个式子:

\[x^{(n)}=\sum_{i=0}^n s(n,i)x^i \]

反演得到

\[x^n=\sum_{i=0}^n (-1)^{n-i}S(n,i)x^{(i)} \]

上升和下降转化一下得到

\[x_{(n)}=\sum_{i=0}^n s(n,i)x^{i}(-1)^{n-i} \]

\(x\)替换为\(-x\)又可以得到

\[x^n=\sum_{i=0}^n S(n,i)x_{(i)} \]

诸如此类……

总结一下,应该都是普通转上升/下降时用第二类,上升/下降转普通时用第一类。这也许和斯特林数最基本的定义有关。

其他一些可能有用的东西

\[S(n+1,m+1)=\sum_k{n\choose k}S(k,m) \]

利用组合意义很容易理解。

\[s(n+1,m+1)=\sum_k s(n,k){k\choose m} \]

这个学长不知道怎么组合意义,那我更不会了qwq

update:会了。

考虑后面的式子的意义,就是选出一些元素组成 \(m\) 个圆排列,剩下的随便搞。

那么就等价于加入一个特殊元素,分成 \(m+1\) 个圆排列,其中没有特殊元素的圆排列就是需要的 \(m\) 个圆排列,剩下的从特殊元素这里断开,可以对应到一个排列,而众所周知一个排列即可对应到任意组合的圆排列。

posted @ 2019-05-29 13:54  p_b_p_b  阅读(686)  评论(2编辑  收藏  举报