跳转至

斯特林数

第二类斯特林数(斯特林子集数)

定义

\(S_2(n,k)=\begin{Bmatrix}n\\k\end{Bmatrix}\)

表示将 \(n\) 个不同的元素,划分为 \(k\) 个不区分的集合(不允许空集)的方案数。

递推公式

\[ \begin{align} S_2(0,0)&=1\nonumber\\ S_2(n,k)&=S_2(n-1,k-1)+k*S_2(n-1,k)\nonumber\\ \end{align} \]

组合意义

插入一个新元素时,有两种方案:

① 将新元素单独放入一个子集,有 \(S_2(n-1,k-1)\) 种。

② 将新元素放入已有的 \(k\) 个子集,有 \(k*S_2(n-1,k)\) 种。

推论

\(G_i\) 为将 \(n\) 个不同的元素,划分到 \(i\) 个不同的集合(允许空集)内,\(F_i\) 为将 \(n\) 个不同的元素,划分到 \(i\) 个不同的集合(不允许空集) 。

则有 \(G_i=i^n\),显然有 \(G_i=\sum_{j=0}^iC_i^j*F_j\)

根据二项式反演有

\[ \begin{align} F_i&=\sum_{j=0}^i(-1)^{i-j}*C_i^j*G_j\nonumber\\ &=\sum_{j=0}^i(-1)^{i-j}*C_i^j*j^n\nonumber\\ &=\sum_{j=0}^i\dfrac{(-1)^{i-j}*i!*j^n}{j!*(i-j)!}\nonumber\\ \end{align} \]

因为 \(F_i\)\(S_2(n,i)\) 的区别在于,\(F_i\) 是有序的,所以 \(F_i=S_2(n,i)*i!\)

所以

\[ S_2(n,m)=\dfrac{F_m}{m!}=\sum_{i=0}^m\frac{(-1)^{m-i}\cdot{i}^n}{i!\cdot(m-i)!}\nonumber \]
\[ G_i=i^n=\sum_{j=0}^iC_i^j*F_j=\sum_{j=0}^i\left(C_i^j*S_2(n,j)*j!\right)\nonumber \]

同一行

例题

P5395 第二类斯特林数·行 - 洛谷

C++
1
2
3
4
{ 多项式基础模版 }
int n;
cin >> n;
cout << other::Stirling2Row(n) << "\n";

同一列

例题

P5396 第二类斯特林数·列 - 洛谷

C++
1
2
3
4
{ 多项式基础模版 }
int n, k;
cin >> n >> k;
cout << other::Stirling2Col(n, k);

第一类斯特林数(斯特林轮换数)

定义

\(S_1(n,k)=\begin{bmatrix}n\\k\end{bmatrix}\)

表示将 \(n\) 个两两不同的元素,划分为 \(k\) 个不区分的轮换(非空)的方案数。

递推公式

\[ \begin{align} S_1(0,0)&=1\nonumber\\ S_1(n,k)&=S_1(n-1,k-1)+(n-1)*S_1(n-1,k)\nonumber\\ \end{align} \]

组合意义

插入一个新元素时,有两种方案:

① 将新元素置于一个单独的轮换中,共有 \(S_1(n-1,k-1)\) 种。

② 将新元素放入已有的轮换中的任意一个位置,共有 \((n-1)*S_1(n-1,k)\) 种。

同一行

例题

P5408 第一类斯特林数·行 - 洛谷

C++
1
2
3
4
{ 多项式基础模版 }
int n;
cin >> n;
cout << other::Stirling1Row(n) << "\n";

同一列

例题

P5409 第一类斯特林数·列 - 洛谷

C++
1
2
3
4
{ 多项式基础模版 }
int n, k;
cin >> n >> k;
cout << other::Stirling1Col(n, k);

上升幂与普通幂的相互转化

\[ \begin{align} \nonumber x^\overline{n}&=\prod_{i=0}^{n-1}(x+i)=\sum_{i=0}^nS_1(n,i)*{x^i}\\ \nonumber x^n&=\sum_{i=0}^{n}S_2(n,i)*(-1)^{n-i}*x^\overline{i} \end{align} \]

下降幂与普通幂的互相转化

\[ \begin{align} \nonumber x^\underline{n}&=\prod_{i=0}^{n-1}(x-i)=\sum_{i=0}^nS_1(n,i)*(-1)^{n-i}*x^k\\ \nonumber x^n&=\sum_{i=0}^{n}S_2(n,i)*x^\underline{i} \end{align} \]

性质

\[ \begin{align} \nonumber x^\underline n&=\dfrac{x!}{(x-n)!}\\ \nonumber C_n^k*k^\underline m&=C_{n-m}^{k-m}*n^\underline m\\ \nonumber (-x)^\overline n&=(-1)^n*x^\underline n\\ \nonumber (-x)^\underline n&=(-1)^n*x^\overline n \end{align}\\ \]