[学习笔记]斯特林数与斯特林反演
第二类斯特林数
\(\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}\)的关系,因为集合无标号,后者是前者的\(i!\)倍。
同一行第二类斯特林数的计算
方法一:直接利用通项公式。
直接卷积即可。
\(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]\)