oi-wiki
Version:
wiki for OI / ACM-ICPC
37 lines (25 loc) • 1.02 kB
Markdown
## Stirling 数(子集划分)
根据例题来讲解:<br>
(2007 普及)将$n$个数$(1,2,…,n)$分成$r$个部分。每个部分至少一个数。将不同划分方法的总数记为$S_n^r$。例如,$S_4^2=7$,这 7 种不同的划分方法依次为 $\{\ (1) , (234) \}\,\{\ (2) , (134) \}\,\{\ (3) , (124) \}\,\{\ (4) , (123) \}\,\{\ (12) , (34) \}\,\{\ (13) , (24) \}\,\{\ (14) , (23) \}$。当$n=6,r=3$时,$S_6^3$=( )<br>
> 提示:先固定一个数,对于其余的 5 个数考虑$S_5^3$与$S_5^2$,再分这两种情况对原固定的数进行分析。
题解:在近几年算法竞赛中,递推算法越来越重要:
$$
S_6^3=3 \times S_5^3 + S_5^2
$$
$$
S_5^3=3 \times S_4^3 + S_4^2
$$
$$
S_5^2=2 \times S_4^2 + S_4^1
$$
第二类 stirling 数,显然拥有这样的性质:
$$
S_n^m = m \times S_{n-1}^{m} + S_{n-1}^{m-1}
$$
$$
S_n^1 = 1,S_n^0 = 0,S_n^n = 1
$$
而这些性质就可以总结成:
$$
S_n^3 = \frac{1}{2} \times (3^{n-1}+1) - 2^{n-1}
$$