斯特林数(Stirling Number)
斯特林数主要处理的是把 N N N个不同的元素分成 k k k个集合或环的个数问题
1.第二类斯特林数
表示将 n n n个元素划分成 m m m个集合,每个集合非空的方案数,读作 n n n子集 m m m,记作 { n m } \begin{Bmatrix}n\\\\m \end{Bmatrix} ⎩ ⎨ ⎧nm⎭ ⎬ ⎫,又称为斯特林子集数
1.1、组合意义推导
新来一个元素 n n n,对于该元素我们有两种方案:
(1):元素 n n n单独做一个集合,故此时的方案为: { n − 1 k − 1 } \begin{Bmatrix}n-1\\\\k-1\end{Bmatrix} ⎩ ⎨ ⎧n−1k−1⎭ ⎬ ⎫
(2):元素 n n n放入一个现有的非空集合,那么我们需要选择一个非空集合,故此时的方案为: C k 1 { n − 1 k } C_k^1\begin{Bmatrix}n-1\\\\k\end{Bmatrix} Ck1⎩ ⎨ ⎧n−1k⎭ ⎬ ⎫
所以通过加法原理可以得到: { n m } = { n − 1 k − 1 } + C k 1 { n − 1 k } \begin{Bmatrix}n\\\\m \end{Bmatrix}=\begin{Bmatrix}n-1\\\\k-1\end{Bmatrix}+C_k^1\begin{Bmatrix}n-1\\\\k\end{Bmatrix} ⎩ ⎨ ⎧nm⎭ ⎬ ⎫=⎩ ⎨ ⎧n−1k−1⎭ ⎬ ⎫+Ck1⎩ ⎨ ⎧n−1k⎭ ⎬ ⎫
1.2、容斥原理推导
设全集 S = { 乱放 } 子集 A i = { 第 i 个盒子是空的 } ∴ ∣ S − U k = 0 m A i ∣ = ∑ k = 0 m ( − 1 ) k [ 子问题 : 哪几个盒子是空的 ] = 1 m ! ∑ k = 0 m ( − 1 ) k C m k ( m − k ) n = ∑ k = 0 m ( − 1 ) k k ! ( m − k ) n ( m − k ) ! ∴ 通项公式 { n m } = ∑ k = 0 m ( − 1 ) k k ! ( m − k ) n ( m − k ) ! 设全集S=\{乱放\}\\\\ 子集A_i=\{第i个盒子是空的\}\\\\ \begin{aligned} \therefore|S-U_{k=0}^{m}A_i|&=\sum_{k=0}^{m}(-1)^k[子问题:哪几个盒子是空的]\\ &=\frac{1}{m!}\sum_{k=0}^{m}(-1)^kC_m^k(m-k)^n\\ &=\sum_{k=0}^m\frac{(-1)^k}{k!}\frac{(m-k)^n}{(m-k)!} \end{aligned} \\ \therefore 通项公式 \begin{Bmatrix} n\\\\m \end{Bmatrix}=\sum_{k=0}^m\frac{(-1)^k}{k!}\frac{(m-k)^n}{(m-k)!} 设全集S={乱放}子集Ai={第i个盒子是空的}∴∣S−Uk=0mAi∣=k=0∑m(−1)k[子问题:哪几个盒子是空的]=m!1k=0∑m(−1)kCmk(m−k)n=k=0∑mk!(−1)k(m−k)!(m−k)n∴通项公式⎩ ⎨ ⎧nm⎭ ⎬ ⎫=k=0∑mk!(−1)k(m−k)!(m−k)n
通过观察我们可以发现通项公式其实是一个卷积的形式,因此我们可以利用FFT在 O ( n l o g n ) O(nlogn) O(nlogn)的时间内求对于 n n n不变,任意 m ∈ [ 0 , n ] m\in[0,n] m∈[0,n]的 { n m } \begin{Bmatrix}n\\\\m\end{Bmatrix} ⎩ ⎨ ⎧nm⎭ ⎬ ⎫
1.3、生成函数推导
由于分的每个集合是没有标号的,故可以写出每个集合的指数生成函数 A ( x ) = ∑ i = 1 + ∞ x i i ! ∴ { n m } = [ x n ] A m ( x ) m ! 由于分的每个集合是没有标号的,故可以写出每个集合的指数生成函数A(x)=\sum_{i=1}^{+\infty}\frac{x^i}{i!}\\ \therefore \begin{Bmatrix} n\\m \end{Bmatrix}=\frac{[x^n]A^m(x)}{m!} 由于分的每个集合是没有标号的,故可以写出每个集合的指数生成函数A(x)=i=1∑+∞i!xi∴{nm}=m![xn]Am(x)
那么可以利用多项式快速幂求出
通过观察我们还可以发现,在 m m m不变时,利用多项式快速幂求出 A m ( x ) A^m(x) Am(x)后,对于任意 n > m n>m n>m都可以通过 A m ( x ) A^m(x) Am(x)在 O ( 1 ) O(1) O(1)时间内知道对应的 [ x n ] [x^n] [xn]
1.4、第二类斯特林数的重要性质
n k = ∑ i = 0 k i ! C n i { k i } n^k=\sum_{i=0}^{k}i!C_n^i\begin{Bmatrix}k\\i\end{Bmatrix} nk=i=0∑ki!Cni{ki}
1.4.1、理解
等式左边考虑 k k k个球可以放置在 n n n个盒子里
等式右边考虑为枚举非空盒子的数量 i i i,那么把 k k k个球放到 i i i个盒子
1.4.2、运用
可以将一个高次方数转化为第二类斯特林数
1.5、第二类斯特林数其他性质
{ 0 0 } = 1 { n 0 } = 0 , n > 0 { n n } = 1 { n 2 } = { n − 1 1 } + 2 × { n − 1 2 } = 1 + 2 n − 1 { n n − 1 } = C n 2 { n n − 2 } = C n 3 + 3 C n 4 { n 3 } = 1 2 ( 3 n − 1 + 1 ) − 2 n − 1 { n n − 3 } = C n 4 + 10 C n 5 + 15 C n 6 \begin{aligned} &\begin{Bmatrix} 0\\0 \end{Bmatrix}=1\\ &\begin{Bmatrix} n\\0 \end{Bmatrix}=0,n>0 \\ &\begin{Bmatrix} n\\n \end{Bmatrix}=1 \\ &\begin{Bmatrix} n\\2 \end{Bmatrix}=\begin{Bmatrix} n-1\\1 \end{Bmatrix}+2\times \begin{Bmatrix} n-1\\2 \end{Bmatrix}=1+2^{n-1} \\ &\begin{Bmatrix} n\\n-1 \end{Bmatrix}=C_n^2 \\ &\begin{Bmatrix} n\\n-2 \end{Bmatrix}=C_n^3+3C_n^4 \\ &\begin{Bmatrix} n\\3 \end{Bmatrix}=\frac{1}{2}(3^{n-1}+1)-2^{n-1} \\ &\begin{Bmatrix} n\\n-3 \end{Bmatrix}=C_n^4+10C_n^5+15C_n^6 \end{aligned} {00}=1{n0}=0,n>0{nn}=1{n2}={n−11}+2×{n−12}=1+2n−1{nn−1}=Cn2{nn−2}=Cn3+3Cn4{n3}=21(3n−1+1)−2n−1{nn−3}=Cn4+10Cn5+15Cn6
2、第一类斯特林数
表示 n n n 个数形成 m m m 个环的方案数,读作 n n n 轮换 m m m ,记作 [ n m ] \begin{bmatrix}n\\\\m\end{bmatrix} nm ,又称为斯特林轮换数
2.1、组合意义推导
新来一个元素 n n n,对于该元素我们有两种方案:
(1):元素 n n n单独做一个环,故此时的方案为: [ n − 1 k − 1 ] \begin{bmatrix}n-1\\\\k-1\end{bmatrix} n−1k−1
(2):元素 n n n放入一个现有的环,那么我们需要选择一个数,并把这个新数插到其前面,故此时的方案为: C n − 1 1 [ n − 1 k ] C_{n-1}^1\begin{bmatrix}n-1\\\\k\end{bmatrix} Cn−11 n−1k
所以通过加法原理可以得到: [ n m ] = [ n − 1 k − 1 ] + C n − 1 1 [ n − 1 k ] \begin{bmatrix}n\\\\m \end{bmatrix}=\begin{bmatrix}n-1\\\\k-1\end{bmatrix}+C_{n-1}^1\begin{bmatrix}n-1\\\\k\end{bmatrix} nm = n−1k−1 +Cn−11 n−1k
2.2、生成函数推导
同样地我们考虑单个环上的生成函数,对于长度为 i 的环而言,其方案数为 ( i − 1 ) ! ∴ 我们可以写出单个环的指数生成函数 : A ( x ) = ∑ i = 1 n ( i − 1 ) ! x i i ! = ∑ i = 1 n x i i ∴ [ n m ] = [ x n ] A m ( x ) 同样地我们考虑单个环上的生成函数,对于长度为i的环而言,其方案数为(i-1)!\\ \therefore 我们可以写出单个环的指数生成函数:A(x)=\sum_{i=1}^{n}(i-1)!\frac{x^i}{i!}=\sum_{i=1}^{n}\frac{x^i}{i}\\ \therefore \begin{bmatrix} n\\m \end{bmatrix}={[x^n]A^m(x)} 同样地我们考虑单个环上的生成函数,对于长度为i的环而言,其方案数为(i−1)!∴我们可以写出单个环的指数生成函数:A(x)=i=1∑n(i−1)!i!xi=i=1∑nixi∴[nm]=[xn]Am(x)
2.3、第一类斯特林数的性质
[ 0 0 ] = 1 [ n 0 ] = 0 , n > 0 [ n 1 ] = ( n − 1 ) ! [ n n − 1 ] = C n 2 [ n n − 2 ] = ( n − 1 ) ! × ∑ i = 1 n − 1 1 i [ n n − 2 ] = 2 C n 3 + 3 C n 4 ∑ k = 0 n [ n k ] = n ! \begin{aligned} &\begin{bmatrix} 0\\0 \end{bmatrix}=1 \\ &\begin{bmatrix} n\\0 \end{bmatrix}=0,n>0 \\ &\begin{bmatrix} n\\1 \end{bmatrix}=(n-1)! \\ &\begin{bmatrix} n\\n-1 \end{bmatrix}=C_n^2 \\ &\begin{bmatrix} n\\n-2 \end{bmatrix}=(n-1)!\times \sum_{i=1}^{n-1}\frac{1}{i} \\ &\begin{bmatrix} n\\n-2 \end{bmatrix}=2C_n^3+3C_n^4 \\ &\sum_{k=0}^{n}\begin{bmatrix} n\\k \end{bmatrix}=n! \end{aligned} [00]=1[n0]=0,n>0[n1]=(n−1)![nn−1]=Cn2[nn−2]=(n−1)!×i=1∑n−1i1[nn−2]=2Cn3+3Cn4k=0∑n[nk]=n!