斯特林数

source:《具体数学》第六章
记号:
\(\begin{Bmatrix}n\\k\end{Bmatrix}\):第二类斯特林数,读作“\(n\) 子集 \(k\)”。
\(\begin{bmatrix}n\\k\end{bmatrix}\):第一类斯特林数,读作“\(n\) 轮换 \(k\)”。

基本思想:
一一对应;递推。


基础公式介绍

第二类斯特林数

\(n\) 个元素划分成 \(k\)无标号的集合,有几种方案?
\(\begin{Bmatrix}4\\2\end{Bmatrix} = 7\),因为有:

\[\{1\},\{2,3,4\} \\ \{2\},\{1,3,4\} \\ \{3\},\{1,2,4\} \\ \{1,2\},\{3,4\} \\ \{1,3\},\{2,4\} \\ \{2,3\},\{1,4\} \\ \{1,2,3\},\{4\} \\ \]

大括号表示子集符号,这一符号雷同也颇具含义。

显然有初始状态 \(\begin{Bmatrix}n\\n\end{Bmatrix} = 1, \begin{Bmatrix}k\\0\end{Bmatrix} = 0(k>0)\)

考虑递推。
考虑最后一个数字加入什么集合。
可以新开一个集合,也可以选择之前的集合加入。
那么

\[\begin{Bmatrix}n\\k\end{Bmatrix} = \begin{Bmatrix}n-1\\k-1\end{Bmatrix} + k\begin{Bmatrix}n-1\\k\end{Bmatrix}\]

时间复杂度 \(O(nk)\)

有标号?乘以 \(k!\) 即可。

https://codeforces.com/gym/100342/problem/D

第一类斯特林数

\(n\) 个元素划分成 \(k\)无标号的轮换,有几种方案?

注意轮换指的是若干个数字组成的一个环。比如 \([1,2,3,4] = [3,4,1,2]\),但是 \([1,2,3,4] \neq [4,3,2,1]\)

\(\begin{bmatrix}4\\2\end{bmatrix} = 11\),因为有:

\[[1,2,3],[4] \\ [1,3,2],[4] \\ (剩下六组轮换) \\ [1,2],[3,4] \\ [1,3],[2,4] \\ [2,3],[1,4] \\ \]

我们先来探讨特殊情况。

两个数的集合可以组成几个轮换?一个,因为 \([A,B]=[B,A]\)。三个数的集合可以组成两个轮换:\([A,B,C],[A,C,B]\)

\(n\) 个数的集合 \(\{1,...,n\}\) 可以组成几个轮换?考虑钦定 \(1\) 放在最前面,那么剩下 \(n-1\) 个数的排列与 \(n\) 个数的轮换一一对应,也就是 \(\begin{bmatrix}n\\1\end{bmatrix} = (n-1)!\)

注意到 \(\begin{bmatrix}n\\k\end{bmatrix} \geq \begin{Bmatrix}n\\k\end{Bmatrix}\) 恒成立。因为一个子集可以有若干个轮换。

考虑递推。最后一个数怎么插?可以单独成为一个轮换。不单独成为轮换的情况有几种呢?考虑钦定所有轮换的第一个数,那么每一个数之前都可以插入最后一个数形成一个新的轮换:

\[[A,B,C,D] + E \\ \rightarrow \\ [E,A,B,C,D] \\ [A,E,B,C,D] \\ [A,B,E,C,D] \\ [A,B,C,E,D] \\ \]

注意,\([A,B,C,D,E] = [E,A,B,C,D]\),因此末尾不能够插入数。这样,一共有 \(n-1\) 个位置可以插入数。

因此有

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

时间复杂度 \(O(nk)\)

贝尔数

\(B_i\) 表示将集合 \(\{1,...,i\}\) 划分为若干个集合的方案数。

也就是 \(\sum \limits_{k \ge 0} \begin{Bmatrix}i\\k\end{Bmatrix}\),也就是对所有划分集合的个数求和。

递推式是:\(B_0 = 1\)\(B_i = \sum \limits_{k = 0} ^i \dbinom{n}{k} B_k\)。证明:

考虑最后一个数。其和某 \(k\) 个其他的数分到一起的贡献是 \(B_{n - k} \times \dbinom{n}{k}\)

和幂相关进阶

明确一些记号的记法:
\(\langle x^k \rangle \mathrm{poly} x\) 表示 \(x^k\)\(\mathrm{poly}x\) 中的系数。

\([x]_k\) 表示 \(x\)\(k\) 次下降幂,也即 \(x(x - 1)(x-2)...(x-(k-1))\)

\([x]^k\) 表示 \(x\)\(k\) 次上升幂,也即 \(x(x + 1)(x+2)...(x+(k-1))\)

注意有:\([x]^k = [x+k]_k\)

这两个东西和组合数的联系是,\(\dbinom{n}{m} = \cfrac{[n]_m}{[m]_m} = \cfrac{[n]_m}{m!}\)

斯特林数描述了下降幂/上升幂和普通幂之间的一些联系,使得包含第一类/第二类斯特林数/下降幂/上升幂/普通幂的式子之间可以灵活变换。

第一类斯特林数的性质

首先介绍第一类斯特林数的另一种定义方式:

有符号斯特林数:
\(\begin{bmatrix}n\\k\end{bmatrix}^{\pm}\),其定义由下降幂导出:

\[[x]_n = \sum \limits_{k = 0} ^ n \begin{bmatrix}n\\k\end{bmatrix}^{\pm} x^k \]

也就是,\(\begin{bmatrix}n\\k\end{bmatrix}^{\pm} = \langle x^k \rangle [x]_n\)。形象地,认为 \(x(x-1)(x-2)...(x-n+1)\) 里面选出 \(k\) 项选 \(x\),其他 \(n - k\) 项选常数,组成的所有项之和。也就是说 \(\begin{bmatrix}n\\k\end{bmatrix}^{\pm}\) 的值等于 \(\sum \limits_{T \subseteq \{0, -1, ..., -(n - 1)\}, |T| = n-k} \prod_{i \in T} i\)

显然,对于上升幂有

\[[x]^n = \sum \limits_{k = 0} ^ n |\begin{bmatrix}n\\k\end{bmatrix}^{\pm}| x^k \]

因为,是从 \(0, 1, 2, ..., n - 1\) 里面选出 \(k\) 个组成的集合乘积之和。对于一个固定的 \(k\),所有选出的集合同号,所以只需取绝对值即得到上升幂的系数。(显然对于 \(n - k\) 是奇数,其有标号斯特林数是负数)

这种定义方式下,有:

\[|\begin{bmatrix}n\\k\end{bmatrix}^{\pm}| = \begin{bmatrix}n\\k\end{bmatrix} \]

这揭示了组合意义和多项式意义之间的联系。证明考虑其递推式相同即可:

\[|\begin{bmatrix}n+1\\k+1\end{bmatrix}^{\pm}| = |\begin{bmatrix}n\\k\end{bmatrix}^{\pm}| + n \times |\begin{bmatrix}n\\k+1\end{bmatrix}^{\pm}| \]

考虑选出的所有 \(T\),有一些包含 \(n\),有一些不包含 \(n\),递推式就是这样的。

于是我们可以从这里得出上升幂和下降幂的联系:

\[[x]^n = \sum \limits_{k = 0} ^ n |\begin{bmatrix}n\\k\end{bmatrix}^{\pm}| x^k = (-1)^n \sum \limits_{k = 0} ^ n \begin{bmatrix}n\\k\end{bmatrix}^{\pm} (-x)^k = (-1)^n [-x]_n \]

等价地

\[[x]_n = [-x]^n \times (-1)^n \]

这个联系我们也可以从上升幂和下降幂的朴素表示形式中得出。

对于 \((x+y)\) 的上升幂和 \(x,y\) 的上升幂的转化,我们有如下式子:

\[[x+y]^n = \sum \limits_{k = 0}^n \dbinom{n}{k} [x]^k [y]^{n-k} \]

证明:考虑 \(\langle x^ay^b \rangle \mathrm{LHS}\) 的取值,它相当于把 \(n\) 项里面取出 \(a\) 项选 \(x\)\(b\) 项选 \(y\),剩下的选常数。显然等于 \(\dbinom{a+b}{a} \times \begin{bmatrix}n\\a+b\end{bmatrix}\)

考虑 \(\langle x^ay^b \rangle \mathrm{RHS}\) 的取值,对于一个 \(k\),它相当于有两个集合 \(\{0, ..., k - 1\}\)\(\{0, ..., n - k - 1\}\) 里面分别选出 \(a, b\) 项,等于 \(\sum \limits_{k = 0}^n \dbinom{n}{k} \times \begin{bmatrix}k\\a\end{bmatrix} \times \begin{bmatrix}n-k\\b\end{bmatrix}\)

考虑左右两边的组合意义:左边相当于从 \(\{0, ..., n - 1\}\) 选出 \(a+b\) 个无标号的圆排列,将其中的 \(a\) 个染成黑色,其他染成白色的方案数。右边相当于选出 \(k\) 个数组成 \(a\) 个黑色圆排列,然后其他数组成 \(b\) 个白色圆排列的方案数。显然构成一个双射,所以 \(\mathrm{LHS = RHS}\)

第二类斯特林数的性质

对于第二类斯特林数,有:

\[x^n = \sum \limits_{k = 1}^n \begin{Bmatrix}n\\k\end{Bmatrix}[x]_k \]

证明:考虑左边的组合意义,将有标号的 \(n\) 个小球放在有标号的 \(x\) 个盒子里,没有其他限制,得到的方案数是 \(x^n\)。考虑第二类斯特林数的组合意义,将有标号的 \(n\) 个小球放在无标号的 \(x\) 个盒子中,要求每个盒子是非空的,得到的方案数是 \(\begin{Bmatrix}n\\k\end{Bmatrix}\)。因为这是满射,所以对于盒子有标号的情况,乘以一个 \(k!\) 即可

考虑从满射到没有限制,经过了什么:你枚举 \(k\) 个盒子使得它们都强制非空,其他的强制空的,得到 \(\sum \limits_{k = 0}^n \dbinom{n}{k} k! \begin{Bmatrix}x\\k\end{Bmatrix} = \sum \limits_{k = 0}^n \begin{Bmatrix}x\\k\end{Bmatrix}[x]_k\)。这样就证完了。

对于上升幂的版本,考虑:

\[x^n = \sum \limits_{k = 1}^n \begin{Bmatrix}x\\k\end{Bmatrix}[x]_k = \sum \limits_{k = 1}^n \begin{Bmatrix}x\\k\end{Bmatrix}(-1)^k \times [-x]^k \]

对于上升幂和下降幂,我们可以直接使用组合数化为同幂次数,也可以展开:

\[[x]^n = \sum \limits_{k = 1}^n \cfrac{n!}{k!} \dbinom{n-1}{k-1} [x]_k \]

证明:

\[\mathrm{LHS} = [x+n]_n = \dbinom{x+n}{n} n! \\ \mathrm{RHS} = \sum \limits_{k = 1}^n \cfrac{n!}{k!} \dbinom{n-1}{k-1} k! \dbinom{x}{k} \]

两边约一下得到

\[\dbinom{x+n}{n} = \sum \limits_{k = 1}^n \dbinom{n-1}{n-k} \dbinom{x}{k} \]

这是标准范德蒙德卷积形式,得证。

这里系数 \(\cfrac{n!}{k!} \dbinom{n-1}{k-1}\) 称为拉赫数,也称第三类斯特林数,注意 \(k=0, n=0\) 没有定义,人为定义为 \(0\) 的话,如果记为 \(F_{n, k}\),那么有好看的形式是

\[[x]^n = \sum \limits_{k = 1}^n F_{n, k} [x]_k \]

第一类斯特林数和第二类斯特林数的互相转化

在上述两个部分中,用第一类斯特林数和普通幂表示了下降幂;用第二类斯特林数和下降幂表示了普通幂。在此回顾这些式子:

\[[x]^n = \sum \limits_{k = 0} ^ n \begin{bmatrix}n\\k\end{bmatrix} x^k \\ [x]_n = \sum \limits_{k = 0} ^ n \begin{bmatrix}n\\k\end{bmatrix} (-1)^{n-k} x^k \\ x^n = \sum \limits_{k = 1}^n \begin{Bmatrix}n\\k\end{Bmatrix}[x]_k \\ x^n = \sum \limits_{k = 1}^n \begin{Bmatrix}n\\k\end{Bmatrix}(-1)^k \times [-x]^k \]

考虑将第二个式子代入第三个式子,可以得到两类斯特林数的乘积的关系:

\[\begin{array} \left x^n = \sum \limits_{k = 1}^n \begin{Bmatrix}n\\k\end{Bmatrix} [x]_k\\~~~~ = \sum \limits_{k = 1}^n \begin{Bmatrix}n\\k\end{Bmatrix} \sum \limits_{t = 0} ^ k \begin{bmatrix}k\\t\end{bmatrix} (-1)^{k-t} x^t \\~~~~= \sum \limits_{t = 0}^n x^t \sum \limits_{k =t}^n \begin{Bmatrix}n\\k\end{Bmatrix}\begin{bmatrix}k\\t\end{bmatrix}(-1)^{k-t} \end{array} \]

所以有 \(\sum \limits_{k =t}^n \begin{Bmatrix}n\\k\end{Bmatrix}\begin{bmatrix}k\\t\end{bmatrix}(-1)^{k-t} = [k == n]\)

同理有 \(\sum \limits_{k =t}^n \begin{bmatrix}n\\k\end{bmatrix}\begin{Bmatrix}k\\t\end{Bmatrix}(-1)^{k-t} = [k == n]\)

posted @ 2022-11-05 11:51  OIer某罗  阅读(28)  评论(0编辑  收藏  举报