斯特林数

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)$ 了.

以上是关于斯特林数的主要内容,如果未能解决你的问题,请参考以下文章

斯特林数贝尔数与伯努利数基础

斯特林数相关

OI关于斯特林数的简单理解

[模板] 斯特林数,性质以及求法

斯特林数应用

斯特林数的计算方法