斯特林数

创建时间:2025-08-23


斯特林数简介

斯特林数也是一种有着独特性质的数,虽然应用场景可能没有卡特兰数广泛,但生活中的应用场景也不少,经常和生成函数、FFT、NTT、二项式反演等算法一起使用。

第一类斯特林数

第一类斯特林数的定义:

对于数字 \(1\sim n\),将其划分为 \(k\) 个圆排列的方案数称为第一类斯特林数,记作 \(s(n,k)\)\([n,k]\)

圆排列:将一个排列首尾相接拼成一个环

可以直接递推求斯特林数 \(s(i,j)\),其初始状态为 \(s(0,0)=0,s(n,0)=0\)\(n>0\))。若 \(i\) 在一个新的圆排列中,则方案数为 \(s(i-1,j-1)\);否则 \(i\) 可能排在 \(1,2,3,\cdots,i-1\) 中任意一个数后面,其方案数为 \(s(i-1,j) \cdot (i-1)\)。故有递推公式:

\[s(i,j)=\left\{\begin{aligned} 1 \quad i=j=0 \\ 0 \quad i>j=0\\ s(i-1,j-1)+s(i-1,j) (i-1) \quad i\ge j>0 \\ \end{aligned}\right.\]

根据第一类斯特林数的定义可以推导出以下常用结论:

\[\begin{equation} s(n,1)=(n-1)! \end{equation} \]

\[\begin{equation} s(n,2)=C_n^2 \end{equation} \]

\[\begin{equation} \sum_{k=0}^n s(n,k)=n! \end{equation} \]

例题:P4609 [FJOI2016] 建筑师

第二类斯特林数

第二类斯特林数的定义:

对于数字 \(1\sim n\),将其划分为 \(k\) 个集合的方案数称为第二类斯特林数,记作 \(S(n,k)\)\(\{n,k\}\)

类比第一类斯特林数,使用递推的方式求解。有初始状态 \(S(0,0)=1,S(n,0)=0\)\(n>0\))。若 \(i\) 属于一个新集合,则方案数为 \(S(i-1,j-1)\);否则,\(i\) 可能属于之前的 \(j\) 个集合中的任意一个,方案数为 \(S(i-1,j-1) \cdot j\)。故有递推公式:

\[S(i,j)=\left\{\begin{aligned} 1 \quad i=j=0\\ 0 \quad i>j=0\\ S(i-1,j-1)+S(i-1,j) j \quad i\ge j>0 \end{aligned}\right.\]

根据定义,同样有结论:

\[\begin{equation} S(n,2)=2^{n-1}-1 \end{equation} \]

\[\begin{equation} S(n,n-1)=C_n^2 \end{equation} \]

\[\begin{equation} \sum_{k=0}^mS(m,k)k!C_n^k=n^m \end{equation} \]

例题:HDU - 2643 RankHDU - 4045 Machine scheduling

posted @ 2026-06-02 16:21  xubaichuan  阅读(19)  评论(0)    收藏  举报