斯特林数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了斯特林数相关的知识,希望对你有一定的参考价值。
重新审视 Stirling Number .
1. 无标号计数, 带标号计数
我们经常处理的有两种计数类型: 组合计数, 排列计数.
但是, 我更喜欢这样称呼:
组合计数 为 无标号计数.
排列计数 为 带标号计数.
因为它能反应我们直观看到的.
无标号计数 有一个等价的概念: 定序计数.
把无标号的元素按照某种指标唯一地规定顺序, 那么无标号的方案与定序的方案一一对应.
例如, 对于集合 {4, 2, 5, 1} , 我们按照集合元素从小到大定序, 得到 (1, 2, 4, 5) , 那么 {4, 2, 5, 1} 对应有且仅有 (1, 2, 4, 5) .
按照集合元素从小到大定序, 这是一种很常见的观念.
带标号计数 有一个等价的概念: 任意定序计数.
例如, 对于集合 {4, 2, 5, 1} , 我们可以任意的定序, 即进行无穷次 random_shuffle , 那么得到 (4, 2, 5, 1) , (4, 2, 1, 5) , ......
无标号计数 与 带标号计数 之间存在数量关系, 即 定序计数 与 任意定序计数 的关系.
设我们计数的对象为 m 个, 无标号计数的答案为 x , 带标号计数的答案为 y , 那么 y = m! x .
2. 下降幂与上升幂
$x ^ {\overline{n}} = x (x + 1) (x + 2) ... (x + n - 1)$ .
$x ^ {\underline{n}} = x (x - 1) (x - 2) ... (x - n + 1)$ .
上升幂与下降幂的关系 $x ^ {\underline{n}} = (-1) ^ n x ^ {\overline{n}}$ .
$x ^ {\overline{n}} = (-1) ^ n x ^ {\underline{n}}$ .
证明 $(-x) ^ {\underline{n}} = (-x) (-x - 1) (-x - 2) (-x - n + 1) = (-1) ^ n x (x + 1) (x + 2) ... (x + n - 1) = (-1) ^ n x ^ {\overline{n}}$ .
二项式定理与下降幂的关系 $\binom{n}{k} = \frac{n !}{k ! (n - k) !} = \frac{n ^ {\underline{k}}}{k!}$ .
3. 第二类斯特林数
第二类斯特林数写作 $\left\{ \begin{aligned} n \\ k \end{aligned} \right\}$ 或 $S_2(n, k)$ , 表示 n 个带标号元素划分到 k 个无标号非空集合的方案数.
第二类斯特林数应该是除了二项式系数外, 最常用的特殊的数.
我不会告诉你写 S2(n, k) 只是因为我想偷懒.
探究一些特殊的情况.
1. $S_2(0, 0) = 1, S_2(n, 0) = 0$ , 即 $S_2(n, 0) = [n = 0]$ .
2. $S_2(0, 1) = 0, S_2(n, 1) = 1$ , 即 $S_2(n, 1) = [n > 0]$ .
3. $S_2(0, 2) = 0, S_2(1, 2) = 0, S_2(n, 2) = 2 ^ {n - 1} - 1$ .
说明 $S_2(n, 2)$ 是将 n 个带标号元素划分到 2 个无标号非空集合的方案数.
我们将 集合 按照 最小元 定序, 任何一个元素, 都可以在 1 的集合, 但不能全部都在 1 的集合.
所以 $S_2(n, 2) = 2 ^ {n - 1} - 1$ .
4. $S_2(n, n - 1) = \binom{n}{2}$ .
说明 将 n 个元素, 划分到 n-1 个集合.
那么有 n-2 个集合只有 1 个元素, 有 1 个集合有 2 个元素.
相当于选择 2 个元素放置到 1 个集合, 所以为 $\binom{n}{2}$ .
5. $S_2(n, n) = 1$ .
6. 当 $0 < n < k $ 时, $S_2(n, k) = 0$ .
我们尝试将 第二类Stirling数 的表给刷出来, 然后观察规律.
考虑如何递归求解 $S_2(n, k)$ .
我们考虑最后一个元素 $n$ , 它可以开辟一个新的集合, 也可以放置到原来的某个集合.
所以 $S_2(n, k) = S_2(n - 1, k - 1) + k S_2(n - 1, k)$ .
我们尝试通过第二类斯特林数, 建立通常幂与下降幂之间的关系, 即将 $x ^ n$ 进行表示.
我们尝试利用组合推理的方法, 将 $x ^ n$ 视为这样一个问题:
将 n 个带标号元素, 每个元素染成 x 种颜色中的一种.
我们还可以这样考虑: 枚举最终染的颜色数 k , 在 x 种元素中选择 k 种, 计算将 n 个元素划分成 k 个带标号集合. 而 n 个元素划分成 k 个带标号集合的方案数, 等于 k! 乘上划分成 k 个无标号集合的方案数.
所以 $x ^ n = \sum_{k} \binom{x}{k} k! S_2(n, k) = \sum_{k} S_2(n, k) x ^ {\underline{k}}$ .
根据上升幂与下降幂的关系, 我们还可以得到通常幂与上升幂的关系.
$(-x) ^ n = (-1) ^ n x ^ n = \sum_{k} S_2(n, k) (-1) ^ k x ^ {\underline{k}}$ .
$x ^ n = \sum_{k} S_2(n, k) (-1) ^ {n - k} x ^ {\underline{k}}$ .
考虑用容斥原理直接计算第二类斯特林数.
首先, 我们通过除以系数 k! , 考虑计算将 n 个带标号元素划分到 k 个带标号集合的方案数.
我们假装 k 个集合一定都会被划分到, 那么每个元素有 k 种选择, 所以答案为 $k ^ n$ , 但这样会算多. 于是假装 k 个集合中有一个集合没有被划分到, 那么出现这种情况的个数为 $\binom{k}{1}$ , 那么每个元素有 $k - 1$ 种选择, 所以答案为 $k ^ {n - 1}$ , 但这样会算少. 以此类推.
我们考虑容斥原理, 枚举假装有多少个集合没有被划分到
$S_2(n, k) = \sum_{i} (-1) ^ i \binom{k}{i} (k - i) ^ n = \sum_{i} \binom{k}{i} (-1) ^ i (k - i) ^ n$ .
这是二项卷积的形式, 利用指数生成函数, 我们就可以在 $O(k \log k)$ 进行求解 $S_2(n, 1), S_2(n, 2), ..., S_2(n, n)$ .
4. 第一类斯特林数
第一类斯特林数写作 $\left[ \begin{aligned} n \\ k \end{aligned} \right]$ 或 $S_1(n, k)$ , 表示将 n 个带标号元素划分到 k 个无标号轮换的方案数.
轮换是一种奇妙的结构, $[a, b, c, d] = [b, c, d, a] = [c, d, a, b] = [d, a, b, c]$ , 直观上的理解就是一个环.
同样地, 探究一些基本的情况.
1. $S_1(n, 0) = S_2(n, 0) = [n = 0]$ .
2. $S_1(n, 1) = (n - 1)!$ .
说明 固定轮换的第 1 位为 1 , 那么剩下有 $(n - 1)!$ 种排列方案.
3. $S_1(n, 2) = (n - 1)! H_{n - 1}$ .
说明 对于不连通的计数, 我们的常见做法是然后枚举 1 所在的连通块的大小, 这里同样如此.
$S_1(n, 2) = \sum_{x = 1} ^ {n - 1} \binom{n - 1}{x - 1} (x - 1)! (n - x - 1)! = \sum_{x = 1} ^ {n - 1} \frac{(n-1)!}{(x-1)! (n - x)!} (x - 1)! (n - x - 1)! = (n - 1)! H_{n - 1}$ .
4. $S_1(n, n-1) = S_2(n, n-1) = \binom{n}{2}$ .
5. $S_1(n, n) = S_2(n, n) = 1$ .
6. 当 $k > n$ 时, $S_1(n, k) = S_2(n, k) = \binom{n}{k} = 0$ .
考虑将 $x ^ {\overline{n}}$ 用通常幂进行表示.
组合推理: 将 n 个元素, 划分到若干个无标号轮换中, 每个轮换可以染成 x 种颜色中的一种.
我们还可以枚举最后划分到了多少个轮换中, 进行计数.
$x ^ {\overline{n}} = \sum_{k} S_1(n, k) x ^ k$ .
利用上升幂与下降幂的关系, 我们可以将下降幂用通常幂表示.
$x ^ {\underline{n}} = (-1) ^ n (-x) ^ {\overline{n}} = (-1) ^ n \sum_{k} S_1(n, k) (-x) ^ k = \sum_{k} (-1) ^ {n - k} S_1(n, k) x ^ k$ .
考虑利用容斥原理求第一类斯特林数.
$S_1(n, k) = \sum_{i = 0} ^ {k - 1} (-1) ^ i \binom{k}{i} (\sum_{x_1 + x_2 + ... + x_{k - i} = n} \binom{n}{x_1, x_2, ..., x_n} \prod_{j = 1} ^ {k - i} (x_j - 1)!$ .
令 $F = \sum_{i = 0} ^ n (i - 1)! \frac{x ^ i}{i!} = \frac{x ^ i}{i}$ .
那么 $S_1(n, k) = \sum_{i = 0} ^ {k - 1} \binom{k}{i} (-1) ^ i F ^ {k - i} (n)$ .
至于如何求出 $F ^ {0, 1, ..., k} (n)$ , 我还没有一个比较好的 idea .
但是假如能求出来, 那么只需要再来一次二项卷积就可以在 $O(n \log n)$ 求出 $S_1(n, 0), S_1(n, 1), ..., S_1(n, n)$ 了.
以上是关于斯特林数的主要内容,如果未能解决你的问题,请参考以下文章