除了組合數、卡特蘭數之外,最重要的一類特殊數便是斯特林數。
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}\)。
另一方面,我們要求所有集合非空,那麼可以考慮容斥, 欽定若干集合為空的,剩下的任意。
那麼可以得到一個計算式:
這樣便可以得到第二類斯特林數的通項公式,只不過求單個只能 \(\Theta(m)\)。
另一方面,我們有下面這個式子:
其含義為,左邊為把 \(n\) 個不同的球裝進 \(m\) 個不同的盒子裡的方案數,右邊是列舉非空的盒子數量,然後乘上第二類斯特林數,並且因為盒子不同,要再乘上 \(i!\)。
更進一步的,上面的式子可以看成下面的式子做二項式反演得到的。
同時,因為 \(\dbinom{m}{i}i!=m^{\underline{i}}\),且 \(i\) 要 \(\leq n\) 才有意義,所以上式可以改寫為:
這樣我們就得到了把普通冪轉化為下降冪的方法。
自然數冪和問題
給定 \(n,m\),求 \(\sum\limits_{i=0}^ni^m\)。
下降冪和組合數的性質很相近啊,我們不妨用上指標求和推一推:
那麼原式等於:
複雜度 \(\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\),從大的到小的不需要。
此外還有 斯特林反演 公式:
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\) 的自由元個數次方。