天天看点

第一类斯特林数

两类斯特林数的其中之一 还是要了解一下的。

一般形如\(\left[\begin{matrix}n\\m\end{matrix}\right]\)写作\(s(n,k)\)

组合意义:\(s(n,k)\)表示把n个数分成k组 每组是一个环 求分成的方案数。

环的意思其实是类似于圆排列的东西。

递推式:\(s(n+1,k)=s(n,k-1)+s(n,k)\cdot n\)

有边界 \(s(0,0)=1\).

性质:\(s(n,1)=(n-1)!\) 这个看起来挺显然不正了 当然可以相当于圆排列来理解。

\(s(n,2)=(n-1)!\times\sum_{i=1}^{n-1}\frac{1}{i}\)这个利用数学归纳法也很好证。

\(\sum\limits_{i=0}^ns(n,k)=n!\)证明:求n个数的所有排列方案数n! 对于某种排列其中必然有k个置换 而置换就是我们上述所说的环的概念。

对于有k个置换的方案数 其为s(n,k)所以可以得到\(\sum\limits_{i=1}^ns(n,k)=n!\)因为s(n,0)=0所以原式成立。

这里先规定一下上升幂和下降幂。

定义下降幂为\(x^{\underline{n}} = x(x-1)\cdots (x-n+1).\)

上升幂为\(x^{\overline{n}} = x(x+1)\cdots (x+n-1).\)

有等式 \(\sum_{i=0}^ns(n,i)x^i=x^{\overline{n}}\)

上面那个还不够重要 再来一个\(x^{\underline{n}}=\sum_{i=0}^{n}\left[\begin{matrix}n\\i\end{matrix}\right](-1)^{n-i} x^i\)

证明 这个式子可以利用数学归纳法 上面那个也同理。

update 7.25:当年写的过于稚嫩。

其实关于 下降幂和第一类斯特林数的关系 可以利用 自然幂和第二类斯特林数的关系 进行斯特林反演得到。

不过这里直接列出等式进行数学归纳法证明了。详细步骤如下:

\(x^{\underline{n+1}}\)

\(=x^{\underline{n}}\times (x-n)\)

\(=(x-n)\sum\limits_{i=0}^{n}(-1)^{n-i}s(n,i)x^i\)

\(=\sum\limits_{i=1}^{n+1}(-1)^{n+1-i}s(n,i-1)x^i+\sum\limits_{i=0}^{n}(-1)^{n+1-i}n\cdot s(n,i)x^i\)

左边是枚举从1开始 然后进行变换。右边是乘以了(-n)进行变换。

因为 s(n,-1)=0,所以左式再做一个变换:

\(\sum\limits_{i=1}^{n+1}(-1)^{n+1-i}s(n,i-1)x^i=\sum\limits_{i=0}^{n+1}(-1)^{n+1-i}s(n,i-1)x^i\)

左式把第n+1项给提出来 和右边进行合并。即:

\(=(-1)^0s(n,n)x^{n+1}+\sum\limits_{i=0}^{n}(-1)^{n+1-i}(s(n,i-1)+ns(n,i))x^i\)

接下来做的变换是 由于\(s(n,i-1)+ns(n,i)=s(n+1,i),s(n,n)=s(n+1,n+1)\)

\(=s(n+1,n+1)x^{n+1}+\sum\limits_{i=0}^{n}(-1)^{n+1-i}s(n+1,i)x^i\)

\(=\sum\limits_{i=0}^{n+1}(-1)^{n+1-i}s(n+1,i)x^i\)

证毕.

注意 这里讨论的是无符号第一类斯特林数 (有符号了一般很少使用

这个证明也比较简单 可以发现斯特林数和下降幂有关 也就是说我们求出下降幂的生成函数 其对应的系数的绝对值就是某一行的斯特林数。

很简便吧 我们可以更快的求斯特林数了。

可以考虑分治FFT 这样的话长度是递增的 每次合并两个多项式可以发现log层 每层FFT nlogn 总复杂度nlog^2

为了避免-1系数的一些问题 可以利用上升幂来求斯特林数 上面的公式也有提到 证明就不证了 数归即可。