斯特林数

原文链接:https://www.cnblogs.com/ww3113306/p/10413829.html

斯特林数

  • 斯特林数的内容主要参考自zzd大佬的博客
  • 在此基础上加上了一些自己的理解和补充内容。
  • 还没写完

第一类斯特林数

定义

\(S_1(n, m)\)表示\(n\)个点,组成\(m\)圆排列的方案数,记做\(\begin{bmatrix}n\\m\end{bmatrix}\),递推公式为:

\[\begin{bmatrix}n\\k\end{bmatrix} = (n - 1)\begin{bmatrix}n - 1\\k\end{bmatrix} + \begin{bmatrix}n - 1\\k - 1\end{bmatrix} \]

理解:单独考虑新加入的第\(n\)个点。

  • \(n\)个点可以独立构成一个新的圆,因此只需要再加上前\(n - 1\)个点构成\(k - 1\)个圆的方案数\(\begin{bmatrix}n - 1\\k - 1\end{bmatrix}\).
  • \(n\)个点可以插入原来有的任意一个圆中(不单独成圆)的任意一个点的左边,故有\((n - 1)\begin{bmatrix}n - 1\\k\end{bmatrix}\)种方案

与阶乘的关系

\[n! = \sum_{i = 0}^{n}\begin{bmatrix}n\\i\end{bmatrix} \]

证明:考虑其组合意义,一个排列对应一个置换,而一个置换会把\(n\)元素分成若干个置换环,其中每一种方案都对应一个置换。而我们把\(n\)个点分成若干个圆排列,就等价于把\(n\)个元素分成若干个置换环,因此我们枚举了把\(n\)个点分成若干个圆排列的方案数,就相当于枚举了置换的方案数。因此上式成立。

与上升/下降次幂的关系

下降次幂

\[x^{\underline{n}} = \sum_{i = 0}^n \begin{bmatrix}n\\i\end{bmatrix}(-1)^{n - i}x^i \]

(注意这个地方枚举从0开始和从1开始是等价的,因为\(\begin{bmatrix}n\\0\end{bmatrix} = 0\))

可以用数学归纳法证明:

\[x^{\underline{n + 1}} = (x - n)x^{\underline{n}} \]

\[= x \cdot x^{\underline{n}} - nx^{\underline{n}} \]

\[= \left( \sum_{i = 0}^{n} \begin{bmatrix}n\\i \end{bmatrix}(-1)^{n - i}x^{i + 1}\right ) - \left(n\sum_{i = 0}^{n} \begin{bmatrix}n\\i\end{bmatrix} (-1)^{n - i}x^i\right) \]

\[= \left(\sum_{i = 1}^{n + 1}\begin{bmatrix}n\\i - 1 \end{bmatrix}(-1)^{n - i + 1}x^i\right) - \left(n\sum_{i = 1}^{n + 1}\begin{bmatrix}n\\i\end{bmatrix}(-1)^{n - i}x^i\right) \]

\[= \sum_{i = 1}^{n + 1}\left(\begin{bmatrix}n\\i - 1 \end{bmatrix} + n \begin{bmatrix}n\\i\end{bmatrix}\right)(-1)^{n - i + 1}x^i \]

\[= \sum_{i = 1}^{n + 1}\begin{bmatrix}n + 1\\i\end{bmatrix}(-1)^{n + 1 - i}x^i \]


####**上升次幂** $$x^{\overline{n}} = \sum_{i = 0}^{n}\begin{bmatrix}n\\k\end{bmatrix}x^{k}$$ 相当于把下降次幂的式子中的-1给去掉了。 ##第一类斯特林数求法(分治FFT,倍增FFT) 最简单的当然就是直接根据递推式来求啦,但是有时候这样的复杂度不够优秀,因此我们需要一点更加优秀的求解方法。

根据第一类斯特林数和上升次幂/下降次幂的关系,我们可以知道将特定的一些下降/上升次幂展开后系数的第\(k\)次项的绝对值就是要求的斯特林数的第\(k\)项。

而上升/下降次幂可以看做一些多项式相乘(本身展开后就是多项式,而不同的上升/下降次幂可以通过合并不同的上升/下降次幂得到)

分治FFT

不会证,貌似要用生成函数?
直接背下来吧,挺好背的。

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

乘出来的多项式的第\(k\)项就是\(\begin{bmatrix}n\\k\end{bmatrix}\)

倍增FFT

因此我们考虑利用这2个式子来求斯特林数。
为了方便,我们选择利用上升幂的式子:

\[f(x) = x^{\overline{n}} = \sum_{i = 0}^n \begin{bmatrix} n\\i\end{bmatrix}x^i \]

\[\ g(x) = (x + n)^{\overline{n}} = \sum_{i = 0}^{n} \begin{bmatrix}n\\i\end{bmatrix}(x + n)^i \]

那么我们有:

\[f(x)g(x) = (x + n)^{\overline{2n}} = \sum_{i = 0}^{2n} \begin{bmatrix}2n\\i\end{bmatrix}(x + n)^i \]

显然可以直接上分治FFT。
但其实我们还有更加优秀的做法。

考虑在分治FFT的基础上进行优化。
思考一下为什么分治FFT是\(nlog^2n\)的?
首先每一层的复杂度要计算\(n\)个点,一共有\(logn\)层,一共计算\(nlogn\)个元素,每个元素的复杂度是\(logn\)的,所以总复杂度\(nlog^2n\)

\(logn\)层这个肯定没法优化,我们考虑优化每一层需要求解的点数.
如果我们可以用同一层的前半部分快速求出后半部分,那么我们每次就只需要递归前半部分,那么我们就不用在每一层都对当前层所有的元素的计算,而只需要对一小块计算。

因此我们考虑如何用前半部分快速计算后半部分。
(此处为了书写方便,用\(a_i\)代替\(\begin{bmatrix} n\\i\end{bmatrix}\))

\[g(x) = \sum_{i = 0}^na_i\sum_{j = 0}^i\binom{i}{j}n^{i - j}x^j \]

换成枚举\(x^i\)

\[= \sum_{i = 0}^nx^i \left( \sum_{j = i}^n\binom{j}{i}n^{j - i}a_j \right) \]

\[= \sum_{i = 0}^n \left( \sum_{j = i}^n\binom{j}{i}n^{j - i}a_j \right)x_i \]

我们只需要求出括号内的数是多少即可。

\[\sum_{j = i}^n\binom{j}{i}n^{j - i}\ a_j \]

现在我们有

\[F(j - i) = \binom{j}{i}n^{j - i} \]

\[G(j) = a_j \]

\(F\)反转一下变成:

\[F(n - j + i + 1) = \binom{j}{i}n^{j - i} \]

这样\(j + n - j + i + 1 = n + i + 1\),是一个定值。
虽然\(n + i + 1 > n\),但是因为数组中下标大于\(n\)的部分都是0,所以可以忽略。
因此我们所要求的系数就是:

\[\sum_{j = i}^n\binom{j}{i}n^{j - i}a_j = (F*G)(n + i + 1) \]

因此我们做一遍FFT就可以得到\(g\)的系数了

那么这样计算的话,一共会计算多少元素呢?

\[n + \frac{n}{2} + \frac{n}{4} + ... + \frac{n}{n} \]

\(O(n)\)级别的!
因为对每个点进行计算的复杂度仍然是\(logn\)级别的,所以我们的总复杂度就可以做到\(nlogn\)
更形象化的,这2个算法的区别可以这样描述:
分治FFT和倍增FFT对比图.png-4.9kB
考虑到后者其实是在用1个点,不断的乘2,最后得到整个序列。因此我们将它称之为倍增FFT。

第二类斯特林数

定义

\(S_2(n, m)\)表示\(n\)个元素分成\(m\)个集合的方案数,记做\(\left\{\begin{array}{c}n\\m\end{array}\right\}\)
递推式为:

\[\left\{\begin{array}{c}n\\m\end{array}\right\} = \left\{\begin{array}{c}n - 1\\m - 1\end{array}\right\} + m\left\{\begin{array}{c}n - 1\\m\end{array}\right\} \]

理解:考虑第\(n\)个元素放在哪里,

  • \(n\)个元素可以独立构成一个新集合,因此方案数为\(\left\{\begin{array}{c}n - 1\\m - 1\end{array}\right\}\).
  • \(n\)个元素可以加入之前的任意一个集合中,因此方案数为\(\left\{ \begin{array}{c}n - 1 \\m\end{array} \right\}\)

重要式子

\[x^n = \sum_{k = 0}^n \left\{ \begin{array}{c} n \\ k \end{array} \right\} x^{\underline{k}} \]

证明:还是用归纳法。。。

求解

一个式子:

\[m!\left\{ \begin{array}{c}n\\m\end{array}\right\} = \sum_{k = 0}^m \binom{m}{k}k^n(-1)^{m - k} \]

证明:用递推式证明.
于是令

\[f(k) = \binom{m}{k}k^n, \quad g(m - k) = (-1)^{m - k} \]

然后用FFT算算就好了。

广义斯特林数

\[\left\{ \begin{array}{c}n\\k\end{array}\right\} = \begin{bmatrix}-k\\-n\end{bmatrix} \]

扩展/总结

来源1

基本式子

\[\begin{bmatrix}n\\k\end{bmatrix} = (n - 1)\begin{bmatrix}n - 1\\k\end{bmatrix} + \begin{bmatrix}n - 1\\k - 1\end{bmatrix} \]

\[\left\{\begin{array}{c}n\\m\end{array}\right\} = \left\{\begin{array}{c}n - 1\\m - 1\end{array}\right\} + m\left\{\begin{array}{c}n - 1\\m\end{array}\right\} \]

\[n! = \sum_{i = 0}^n \begin{bmatrix}n\\i\end{bmatrix} \]

\[\left\{ \begin{array}{c}n\\k\end{array}\right\} = \begin{bmatrix}-k\\-n\end{bmatrix} \]

特殊值

\[\left\{\begin{array}{c}n\\0\end{array}\right\} = \begin{bmatrix}n\\0\end{bmatrix} = [n == 0] \]

\[\left\{\begin{array}{c}n\\1\end{array}\right\} = [n > 0] \]

\[\begin{bmatrix}n\\1\end{bmatrix} = (n - 1)![n > 0] \]

\[\left\{\begin{array}{c}n\\2\end{array}\right\} = (2^{n - 1} - 1)[n > 0] \]

\[\begin{bmatrix}n\\2\end{bmatrix} = (n - 1)!\left(\sum_{i = 1}^{n - 1} \frac{1}{i}\right)[n > 0] \]

\[\left\{\begin{array}{c}n\\n - 1\end{array}\right\} = \begin{bmatrix}n\\n - 1\end{bmatrix} = \binom{n}{2} \]

\[\left\{\begin{array}{c}n\\n\end{array}\right\} = \begin{bmatrix}n\\n\end{bmatrix} = \binom{n}{n} = 1 \]

\[\left\{\begin{array}{c}n\\k\end{array}\right\} = \begin{bmatrix}n\\k\end{bmatrix} = \binom{n}{k} = 0, k > n \]

各种幂相关

\[x^n = \sum_{k = 0}^n\left\{\begin{array}{c}n\\k\end{array}\right\}x^{\underline{k}} = \sum_{k = 1}^n\left\{\begin{array}{c}n\\k\end{array}\right\}(-1)^{n - k}x^{\overline{k}} \]

\[x^{\underline{n}} = \sum_{k = 0}^{n}\begin{bmatrix}n\\k\end{bmatrix}(-1)^{n - k}x^k \]

\[x^{\overline{n}} = \sum_{k = 0}^n\begin{bmatrix}n\\k\end{bmatrix}x^k \]

反转公式

\[\sum_{k = 1}^n \begin{bmatrix}n\\k\end{bmatrix}\left\{\begin{array}{c}k\\m\end{array}\right\}(-1)^{n - k} = [n == m] \]

\[\sum_{k = 1}^n\left\{\begin{array}{c}n\\k\end{array}\right\} \begin{bmatrix}k\\m\end{bmatrix}(-1)^{n - k} = [n == m] \]

其他恒等式

\[\left\{\begin{array}{c}n + 1\\m + 1\end{array}\right\} = \sum_{k = 1}^n \binom{n}{k} \left\{\begin{array}{c}k\\m\end{array}\right\} \]

\[\begin{bmatrix} n + 1\\ m + 1\end{bmatrix} = \sum_{k = 1}^n \begin{bmatrix}n\\k\end{bmatrix} \binom{k}{m} \]

\[\left\{\begin{array}{c}n\\m\end{array}\right\} = \sum_{k = 1}^n\binom{n}{k}\left\{\begin{array}{c}k + 1\\m + 1\end{array}\right\}(-1)^{n - k} \]

\[\begin{bmatrix}n\\m\end{bmatrix} = \sum_{k = 1}^n \begin{bmatrix}n + 1\\k + 1\end{bmatrix} \binom{k}{m}(-1)^{m - k} \]

\[m!\left\{\begin{array}{c}n\\m\end{array}\right\} = \sum_{k = 1}^n\binom{m}{k}k^n(-1)^{m - k} \]

\[\left\{\begin{array}{c}n + 1\\m + 1\end{array}\right\} = \sum_{k = 0}^n \left\{\begin{array}{c}k\\m\end{array}\right\}(m + 1)^{n - k} \]

\[\begin{bmatrix}n + 1\\m + 1\end{bmatrix} = \sum_{k = 0}^n \begin{bmatrix}k\\m\end{bmatrix}n^{\underline{n - k}} = n!\sum_{k = 0}^n \frac{\begin{bmatrix}k\\m\end{bmatrix}}{k!} \]

\[\left\{\begin{array}{c}m + n + 1\\m\end{array}\right\} = \sum_{k = 0}^mk\left\{\begin{array}{c}n + k\\k\end{array}\right\} \]

\[\begin{bmatrix}m + n + 1\\m\end{bmatrix} = \sum_{k = 0}^m(n + k)\begin{bmatrix}n + k\\k\end{bmatrix} \]

\[\binom{n}{m} = \sum_{k = 1}^n\left\{\begin{array}{c}n + 1\\k + 1\end{array}\right\} \begin{bmatrix}k\\m\end{bmatrix}(-1)^{m - k} \]

\[n^{\underline{n - m}}[n \geq m] = \sum_{k = 1}^n \begin{bmatrix} n + 1\\k + 1\end{bmatrix}\left\{\begin{array}{c}k\\m\end{array}\right\}(-1)^{m - k} \]

\[\left\{\begin{array}{c}n\\n - m\end{array}\right\} = \sum_{k = 1}^n \binom{m - n}{m + k} \binom{m + n}{n + k} \begin{bmatrix}m + k \\ k\end{bmatrix} \]

\[\begin{bmatrix}n\\n - m\end{bmatrix} = \sum_{k = 1}^n \binom{m - n}{m + k} \binom{m + n}{n + k}\left\{\begin{array}{c}m + k\\k\end{array}\right\} \]

\[\left\{\begin{array}{c}n\\l + m\end{array}\right\} \binom{l + m}{l} = \sum_{k = 1}^n\left\{\begin{array}{c}k\\l\end{array}\right\} \left\{\begin{array}{c}n - k\\m\end{array}\right\} \binom{n}{k} \]

\[\begin{bmatrix}n \\ l + m\end{bmatrix} \binom{l + m}{l} = \sum_{k = 1}^n \begin{bmatrix}k\\l\end{bmatrix} \begin{bmatrix}n - k\\m\end{bmatrix}\binom{n}{k} \]

posted @ 2019-02-21 17:09  ww3113306  阅读(642)  评论(0编辑  收藏  举报
知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。