[學習筆記]斯特林數與斯特林反演
第二類斯特林數
\(\begin{Bmatrix}n\\k\end{Bmatrix}\),可記做 \(S(n,k)\),表示 \(n\) 個兩兩不同元素,劃分為 \(k\) 個互不區分的非空子集的方案數。
有\(\begin{Bmatrix}n\\k\end{Bmatrix}=\begin{Bmatrix}n - 1\\k - 1\end{Bmatrix} + k\begin{Bmatrix}n - 1\\k\end{Bmatrix}\)
邊界\(\begin{Bmatrix}n\\0\end{Bmatrix} = [n = 0]\)
通項公式
\(\begin{Bmatrix}n\\k\end{Bmatrix} = \sum_{i = 0}^{m} \frac{(-1) ^{m - i}\ \ i^n}{i! (m - i)!}\)
考慮設\(G_i\)為放到\(k\)個兩兩不同的集合的,允許空集的方案,\(F_i\)為兩兩不同的集合的,不允許空集的方案。
那麼有\(G_i = k^n = \sum_{j = 0}^i\binom{i}{j}F_j\)
二項式反演可得
\(F_i = \sum_{j = 0}^i (-1)^{i - j}\binom{i}{j}G_j\\= \sum_{j = 0}^i (-1)^{i - j}\binom{i}{j}j^n\\=\sum_{i = 0}^{m} \frac{i!(-1) ^{i - j}\ \ j^n}{j! (i - j)!}\)
考慮\(F_i\)和\(\begin{Bmatrix}n\\i\end{Bmatrix}\)
同一行第二類斯特林數的計算
方法一:直接利用通項公式。
直接卷積即可。
\(O(nlogn)\)。
方法二:利用指數型生成函式
一個盒子裝 \(i\) 個物品且盒子非空的方案數為\([i > 0]\),寫出其生成函式\(\sum \frac{x_i}{i!} = e^x - 1\),我們知道\(F^k(x)\)就是\(i\)個有標號物品放到\(k\)個有標號的盒子裡的指數型生成函式,那麼\(\exp F(x) = \sum \frac{F^i(x)}{i!}\),即變成了盒子無標號。
所以計算多項式快速冪即可,實際看起來比方法一慢。
第一類斯特林數
第一類斯特林數,\(\begin{bmatrix}n\\k\end{bmatrix}\),表示把\(n\)個兩兩不同的元素劃分成\(k\)個圓排列的方案數。
\(\begin{bmatrix}n\\k\end{bmatrix} = \begin{bmatrix}n - 1\\k - 1\end{bmatrix} + *(n - 1)\begin{bmatrix}n - 1\\k\end{bmatrix}\)
\(\begin{bmatrix}n\\0 \end{bmatrix} = [n = 0]\)
同一行第一類斯特林數的計算
構造生成函式。
\(F_n(x) = \sum_{i = 0}^n \begin{bmatrix}n\\i\end{bmatrix}x^i\)
那麼不難寫出\(F_n(x) = (n - 1)F_{n - 1}(x) + xF_{n - 1}(x)\)
那麼有\(F_n(x) = \prod_{i = 0}^{n - 1}(x + i)\)為上升冪,用上升冪的操作也可做到\(O(nlogn)\),具體是斯特林數及斯特林反演。
同一列第一類斯特林數的計算
單個輪換的指數型生成函式
\(F(x) = \sum_{i = 1} ^ n\frac{(i - 1) !x^i}{i!} = \sum_{i = 1}^n \frac{x^i}{i}\)
直接\(k\)個相乘,就是第一類斯特林數的指數生成函式。
普通數冪及上升冪與下降冪之間的關係
\(x^{\overline n} = \sum_k \begin{bmatrix}n\\i\end{bmatrix} x^k\)
\(x^{n} = \sum_k \begin{Bmatrix}n\\i\end{Bmatrix} (-1) ^ {n - k}x^{\overline k}\)
\(x^{n} = \sum_k \begin{Bmatrix}n\\i\end{Bmatrix} x^{\underline k}\)
\(x^{\underline n} = \sum_k \begin{bmatrix}n\\i\end{bmatrix} (-1) ^ {n - k}x^k\)
多項式下降冪與多項式點值標表示的關係
\(f(x) = \sum_{i = 0}^n b_i x^{\underline i}\)
\((i,a_i),i = 0...n\)。
\(a_k = \sum^{n}_{i = 0}b_ik^{\underline i}\)
\(a_k = \sum_{i = 0}^n \frac{bk!}{(k - i)!}\)
\(\frac{a_k}{k!} = \sum_{i = 0}^k b_i \frac{1}{(k - i)!}\)
是一個卷積形式。
斯特林數反演
有\(f(n) = \sum_{i = 0}^n \begin{Bmatrix}n\\i\end{Bmatrix} g(i)\)
則有\(g(n) = \sum_{i = 0}^n (-1) ^ {n - i}\begin{bmatrix}n\\i\end{bmatrix}f(i)\)
有\(f(i) = \sum_{j = i}^n \begin{Bmatrix}j\\i\end{Bmatrix} g(i)\)
則有\(g(i) = \sum_{i = 0}^n (-1) ^ {j - i}\begin{bmatrix}j\\i\end{bmatrix}f(i)\)
反轉公式:
\(\sum_{k = m}^n \begin{bmatrix}n\\k\end{bmatrix}\begin{Bmatrix}k\\m\end{Bmatrix} = [n = m]\)
\(\sum_{k = m}^n \begin{Bmatrix}n\\k\end{Bmatrix}\begin{bmatrix}k\\m\end{bmatrix} = [n = m]\)