【3】斯特林數

Larunatrecy發表於2024-08-30

除了組合數、卡特蘭數之外,最重要的一類特殊數便是斯特林數。

1.1 第二類斯特林數

斯特林數通常有兩種,分別為第一類斯特林數和第二類斯特林數,後者通常更為重要。

與組合數類似,第二類斯特林數也有自己的符號 $ \begin{Bmatrix}n \ m\end{Bmatrix}$,其含義為把 \(n\) 個不同的數劃分到 \(m\) 個非空集合中的方案數。

我們首先從遞推的角度考慮怎麼計算第二類斯特林數,我們考慮第 \(n\) 個數的劃分情況:

  • 單獨分到一個集合,\(\begin{Bmatrix}n-1 \\ m-1\end{Bmatrix}\)
  • 加入某個集合,$ m\begin{Bmatrix}n-1 \ m\end{Bmatrix}$。

那麼我們得到 $ \begin{Bmatrix}n \ m\end{Bmatrix}=\begin{Bmatrix}n-1 \ m-1\end{Bmatrix}+m\begin{Bmatrix}n-1 \ m\end{Bmatrix}$。

於是可以得到 \(\Theta(n^2)\) 的遞推公式。

那麼,第二類斯特林數有沒有通項公式呢?

首先,因為集合之間沒有區別,我們不妨讓集合也有區別,這樣方案數就變成了 \(m!\begin{Bmatrix}n \\ m\end{Bmatrix}\)

另一方面,我們要求所有集合非空,那麼可以考慮容斥, 欽定若干集合為空的,剩下的任意。

那麼可以得到一個計算式:

\[m!\begin{Bmatrix}n \\ m\end{Bmatrix}=\sum\limits_{i=0}^m\dbinom{m}{i}(-1)^i(m-i)^n \]

這樣便可以得到第二類斯特林數的通項公式,只不過求單個只能 \(\Theta(m)\)

另一方面,我們有下面這個式子:

\[m^n=\sum\limits_{i=0}^m\dbinom{m}{i}{\begin{Bmatrix}n \\ i\end{Bmatrix}}i! \]

其含義為,左邊為把 \(n\) 個不同的球裝進 \(m\) 個不同的盒子裡的方案數,右邊是列舉非空的盒子數量,然後乘上第二類斯特林數,並且因為盒子不同,要再乘上 \(i!\)

更進一步的,上面的式子可以看成下面的式子做二項式反演得到的。

同時,因為 \(\dbinom{m}{i}i!=m^{\underline{i}}\),且 \(i\)\(\leq n\) 才有意義,所以上式可以改寫為:

\[x^n=\sum\limits_{i=0}^n\begin{Bmatrix} n \\i \end{Bmatrix}x^{\underline{i}} \]

這樣我們就得到了把普通冪轉化為下降冪的方法。

自然數冪和問題

給定 \(n,m\),求 \(\sum\limits_{i=0}^ni^m\)

\[\sum\limits_{i=0}^ni^m=\sum\limits_{i=0}^n\sum\limits_{j=0}^m\begin{Bmatrix} m \\j \end{Bmatrix}i^{\underline{j}} \]

\[=\sum\limits_{j=0}^m \begin{Bmatrix} m \\j \end{Bmatrix}\sum\limits_{i=0}^ni^{\underline{j}} \]

下降冪和組合數的性質很相近啊,我們不妨用上指標求和推一推:

\[\sum\limits_{i=0}^ni^{\underline{k}}=k!\sum\limits_{i=0}^n\dbinom{i}{k}=k!\dbinom{n+1}{k+1}=k!\frac{(n+1)!}{(k+1)!(n-k)!}=\frac{(n+1)^{\underline{k+1}}}{k+1} \]

那麼原式等於:

\[=(n+1)\sum\limits_{j=0}^m\begin{Bmatrix} m \\j \end{Bmatrix}\frac{n^{j}}{j+1} \]

複雜度 \(\Theta(m^2)\),瓶頸在於預處理第二類斯特林數。

CF932E Team Work

\[\sum\limits_{i=0}^n\dbinom{n}{i}i^m=\sum\limits_{j=0}^m\begin{Bmatrix} m \\j \end{Bmatrix}\sum\limits_{i=0}^n\dbinom{n}{i}i^{\underline{j}} \]

\[=\sum\limits_{j=0}^m\begin{Bmatrix} m \\j \end{Bmatrix}j!\sum\limits_{i=0}^n\dbinom{n}{i}\dbinom{i}{j} \]

\[=\sum\limits_{j=0}^m\begin{Bmatrix} m \\j \end{Bmatrix}j!\dbinom{n}{j}\sum\limits_{i=0}^{n-j}\dbinom{n-j}{i-j} \]

\[=\sum\limits_{j=0}^m\begin{Bmatrix} m \\j \end{Bmatrix}j!\dbinom{n}{j}2^{n-j} \]

複雜度 \(\Theta(m^2)\)

[省選聯考 2020 A 卷] 組合數問題

\[\sum\limits_{k=0}^n\sum\limits_{j=0}^mf_jk^{j}x^{k}\dbinom{n}{k} \]

\[\sum\limits_{j=0}^mf_j\sum\limits_{k=0}^n\sum\limits_{p=0}^{j}\begin{Bmatrix} j \\p \end{Bmatrix}k^{\underline{p}}x^{k}\dbinom{n}{k} \]

\[\sum\limits_{j=0}^mf_j\sum\limits_{p=0}^{j}\begin{Bmatrix} j \\p \end{Bmatrix}p!\sum\limits_{k=0}^n\dbinom{k}{p}\dbinom{n}{k}x^{k} \]

\[\sum\limits_{j=0}^mf_j\sum\limits_{p=0}^{j}\begin{Bmatrix} j \\p \end{Bmatrix}p!\dbinom{n}{p}\sum\limits_{k=0}^n\dbinom{n-p}{k-p}x^{k} \]

\[\sum\limits_{j=0}^mf_j\sum\limits_{p=0}^{j}\begin{Bmatrix} j \\p \end{Bmatrix}p!\dbinom{n}{p}\sum\limits_{k=0}^{n-p}\dbinom{n-p}{k}x^{k+p} \]

\[\sum\limits_{j=0}^mf_j\sum\limits_{p=0}^{j}\begin{Bmatrix} j \\p \end{Bmatrix}p!\dbinom{n}{p}x^{p}\sum\limits_{k=0}^{n-p}\dbinom{n-p}{k}x^{k} \]

\[\sum\limits_{j=0}^mf_j\sum\limits_{p=0}^{j}\begin{Bmatrix} j \\p \end{Bmatrix}p!\dbinom{n}{p}x^{p}(1+x)^{n-p} \]

複雜度 \(\Theta(m^2)\)

練習一 CF1278F Cards

此外有很多題是根據組合數的組合意義進行最佳化。

P4827 [國家集訓隊] Crash 的文明世界

\[ans_x=\sum\limits_{i=1}^ndis(i,x)^k=\sum\limits_{i=1}^n\sum\limits_{j=0}^k \begin{Bmatrix} k \\j \end{Bmatrix}j!\dbinom{dis(i,x)}{j}=\sum\limits_{j=0}^k \begin{Bmatrix} k \\j \end{Bmatrix}j!\sum\limits_{i=1}^n\dbinom{dis(i,x)}{j} \]

考慮組合意義,在所有點到 \(x\) 的路徑上選了 \(j\) 條邊的方案數之和,那麼容易設計一個 dp,\(f_{x,i}\)\(x\) 子樹內,所有路徑上選出 \(i\) 條邊的方案數之和,轉移是容易的。

之後只需要換根 DP 求出每個點的答案就行,複雜度 \(\Theta(nk)\)

練習二 P8362 [SNOI2022] 數位

1.2 第一類斯特林數

第一類斯特林數被表示為 \(\begin{bmatrix}n \\ m\end{bmatrix}\),其含義為把 \(n\) 個不同元素扔到 \(m\) 個環上的方案數,即有 \(m\) 個置換環的 \(n\) 元排列個數。

與之前類似,我們還是考慮新加入一個元素,也是有兩種情況:

  • 單獨構成一個環,\(\begin{bmatrix}n-1 \\ m-1\end{bmatrix}\)
  • 插入之前的某個元素後面,\((n-1)\begin{bmatrix}n-1 \\ m\end{bmatrix}\)

於是也得到了 \(\Theta(n^2)\) 的遞推公式。

[FJOI2016] 建築師

模板題,按照組合意義推即可。

1.3 斯特林反演

與下降冪類似,我們定義上升冪 \(x^{\overline{n}}=\prod\limits_{i=0}^{n-1}(x+i)\),那麼就有如下兩個公式:

  • \[x^{\overline{n}}=\sum\limits_{i=0}^n\begin{bmatrix} n \\i \end{bmatrix}x^{i} \]

  • \[x^{\underline{n}}=\sum\limits_{i=0}^n(-1)^i\begin{bmatrix} n \\i \end{bmatrix}x^{i} \]

證明比較複雜且不太重要。

結合前面的我們一共有四個高度相似的公式:

  • \[x^n=\sum\limits_{i=0}^n\begin{Bmatrix} n \\i \end{Bmatrix}x^{\underline{i}} \]

  • \[x^n=\sum\limits_{i=0}^n(-1)^i\begin{Bmatrix} n \\i \end{Bmatrix}x^{\overline{i}} \]

  • \[x^{\overline{n}}=\sum\limits_{i=0}^n\begin{bmatrix} n \\i \end{bmatrix}x^{i} \]

  • \[x^{\underline{n}}=\sum\limits_{i=0}^n(-1)^i\begin{bmatrix} n \\i \end{bmatrix}x^{i} \]

這個公式也很好記,我們認為上升冪>普通冪>下降冪,那麼:

  • 從兩邊(上升冪,下降冪)到中間(普通冪)用第二類斯特林數,從中間到兩邊用第一類斯特林數。
  • 從小的到大的要帶 \((-1)^i\),從大的到小的不需要。

此外還有 斯特林反演 公式:

\[f(n)=\sum\limits_{i=0}^n\begin{Bmatrix} n \\i \end{Bmatrix}g(i)\Leftrightarrow g(n)=\sum\limits_{i=0}^n(-1)^i\begin{bmatrix} n \\i \end{bmatrix}f(i) \]

P10591 BZOJ4671 異或圖

我們欽定出 \(i\) 個連通塊,滿足連通塊之間沒邊,連通塊內部隨意,這樣子的方案數是 \(g_i\)

如果恰好有 \(i\) 個連通塊的方案數是 \(f_i\),那麼考慮 \(f\)\(g\) 的關係,因為 \(g\) 的每個連通塊實際可能是由若干連通塊構成的,那麼就是把 \(f\) 的若干連通塊分到一個 \(g\) 的連通塊裡,這個方案數就是第二類斯特林數。

\[g_i=\sum\limits_{j=i}^n\begin{Bmatrix} j \\i \end{Bmatrix}f_j\Leftrightarrow f_i=\sum\limits_{j=i}^n(-1)^{j-i}\begin{bmatrix} j \\i \end{bmatrix}g_j \]

最終求的就是 \(f_1\),因此我們需要求出 \(g_1,g_2\dots g_n\)

直接列舉欽定出來的連通塊,這個複雜度是 \(n\)的貝爾數 ,那麼限制就是連通塊之間每條邊的出現次數是偶數。我們可以列出一些關於圖是否選擇的異或方程,那麼求出線性基之後這個方案數就是 \(2\) 的自由元個數次方。

綜合題目 CF961G Partitions

更綜合的題目 [ARC138E] Decreasing Subsequence

相關文章