斯特林數

原文鏈接: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}\]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章