1. 程式人生 > 其它 >第二類斯特林數小記

第二類斯特林數小記

第一類斯特林數沒弄懂,先咕了。

對於第二類斯特林數記做 \(\begin{Bmatrix}n\\ m\end{Bmatrix}\),也可記做 \(S(n,m)\),表示將 \(n\) 個兩兩不同的元素,劃分到 \(m\) 個互不區分的非空集合的方案數。

遞推式

\[\begin{Bmatrix}n\\ m\end{Bmatrix}=\begin{Bmatrix}n-1\\ m-1\end{Bmatrix}+\begin{Bmatrix}n-1\\ m\end{Bmatrix} \]

邊界是 \(\begin{Bmatrix}n\\ 0\end{Bmatrix}=[n=0]\)

證明:

新插入一個元素時,有兩種方案:

  • 將新元素放進一個新集合裡,方案數為 \(\begin{Bmatrix}n-1\\ m-1\end{Bmatrix}\)
  • 將新元素放進一個原來有的集合裡,方案數為 \(m×\begin{Bmatrix}n-1\\ m\end{Bmatrix}\)

最後用加法原理相加即可。

通項公式

\(\begin{Bmatrix}n\\ m\end{Bmatrix}=\frac{1}{m!}\sum_{i=0}^m(-1)^{m-i}\tbinom{m}{i}i^n\)

簡單理解就是每次欽定有多少個集合有元素,再容斥一下解決,最後因為無序,再除以個 \(\frac{1}{m!}\)

證明:

證明採取二項式反演,設 \(f(i)\)

為將 \(n\) 個元素劃分成 \(i\) 個兩兩不同的集合的方案數(允許有空集),\(g(i)\) 為將 \(n\) 個元素劃分成 \(i\) 個兩兩不同的非空集合的方案數(不允許有空集)

易得

\[f(i)=i^n\\ f(i)=\sum_{j=0}^i\tbinom{i}{j}g(j) \]

那麼反演一下:

\[g(i)=\sum_{j=0}^i(-1)^{i-j}\tbinom{i}{j}f(j)\\ g(i)=\sum_{j=0}^i(-1)^{i-j}\tbinom{i}{j}j^n \]

根據定義可得 \(\frac{1}{m!}g(m)=\begin{Bmatrix}n\\ m\end{Bmatrix}\)

那麼更常用的一種寫法是

\[\begin{Bmatrix}n\\ i\end{Bmatrix}=\frac{1}{i!}\sum_{j=0}^i\frac{(-1)^{i-j}j^ni!}{j!(i-j)!}\\ \begin{Bmatrix}n\\ i\end{Bmatrix}=\sum_{j=0}^i\frac{(-1)^{i-j}j^n}{j!(i-j)!} \]

一種技巧就是設 \(f_i=\frac{(-1)^i}{i!}\)\(g_i=\frac{i^n}{i!}\),然後

\[\begin{Bmatrix}n\\ m\end{Bmatrix}=\sum_{i=0}^mf_i*g_{m-i} \]

\(NTT\) 優化一下。