斯特林数
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\),因为有:
大括号表示子集符号,这一符号雷同也颇具含义。
显然有初始状态 \(\begin{Bmatrix}n\\n\end{Bmatrix} = 1, \begin{Bmatrix}k\\0\end{Bmatrix} = 0(k>0)\)。
考虑递推。
考虑最后一个数字加入什么集合。
可以新开一个集合,也可以选择之前的集合加入。
那么
时间复杂度 \(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\),因为有:
我们先来探讨特殊情况。
两个数的集合可以组成几个轮换?一个,因为 \([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] = [E,A,B,C,D]\),因此末尾不能够插入数。这样,一共有 \(n-1\) 个位置可以插入数。
因此有
时间复杂度 \(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}\),其定义由下降幂导出:
也就是,\(\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\)。
显然,对于上升幂有
因为,是从 \(0, 1, 2, ..., n - 1\) 里面选出 \(k\) 个组成的集合乘积之和。对于一个固定的 \(k\),所有选出的集合同号,所以只需取绝对值即得到上升幂的系数。(显然对于 \(n - k\) 是奇数,其有标号斯特林数是负数)
这种定义方式下,有:
这揭示了组合意义和多项式意义之间的联系。证明考虑其递推式相同即可:
考虑选出的所有 \(T\),有一些包含 \(n\),有一些不包含 \(n\),递推式就是这样的。
于是我们可以从这里得出上升幂和下降幂的联系:
等价地
这个联系我们也可以从上升幂和下降幂的朴素表示形式中得出。
对于 \((x+y)\) 的上升幂和 \(x,y\) 的上升幂的转化,我们有如下式子:
证明:考虑 \(\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}\)。
第二类斯特林数的性质
对于第二类斯特林数,有:
证明:考虑左边的组合意义,将有标号的 \(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\)。这样就证完了。
对于上升幂的版本,考虑:
对于上升幂和下降幂,我们可以直接使用组合数化为同幂次数,也可以展开:
证明:
两边约一下得到
这是标准范德蒙德卷积形式,得证。
这里系数 \(\cfrac{n!}{k!} \dbinom{n-1}{k-1}\) 称为拉赫数,也称第三类斯特林数,注意 \(k=0, n=0\) 没有定义,人为定义为 \(0\) 的话,如果记为 \(F_{n, k}\),那么有好看的形式是
第一类斯特林数和第二类斯特林数的互相转化
在上述两个部分中,用第一类斯特林数和普通幂表示了下降幂;用第二类斯特林数和下降幂表示了普通幂。在此回顾这些式子:
考虑将第二个式子代入第三个式子,可以得到两类斯特林数的乘积的关系:
所以有 \(\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]\)