1. 程式人生 > >斯特林數

斯特林數

函數 under 利用 有一個 得到 根據 重新 情況 寫作

  重新審視 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)$ 了.

斯特林數