【ACM数论】斯特林数

斯特林数(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} n1k1

(2):元素 n n n放入一个现有的非空集合,那么我们需要选择一个非空集合,故此时的方案为: C k 1 { n − 1 k } C_k^1\begin{Bmatrix}n-1\\\\k\end{Bmatrix} Ck1 n1k

所以通过加法原理可以得到: { 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 = n1k1 +Ck1 n1k

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个盒子是空的}SUk=0mAi=k=0m(1)k[子问题:哪几个盒子是空的]=m!1k=0m(1)kCmk(mk)n=k=0mk!(1)k(mk)!(mk)n通项公式 nm =k=0mk!(1)k(mk)!(mk)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=0ki!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}={n11}+2×{n12}=1+2n1{nn1}=Cn2{nn2}=Cn3+3Cn4{n3}=21(3n1+1)2n1{nn3}=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} n1k1

(2):元素 n n n放入一个现有的环,那么我们需要选择一个数,并把这个新数插到其前面,故此时的方案为: C n − 1 1 [ n − 1 k ] C_{n-1}^1\begin{bmatrix}n-1\\\\k\end{bmatrix} Cn11 n1k

所以通过加法原理可以得到: [ 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 = n1k1 +Cn11 n1k

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的环而言,其方案数为(i1)!我们可以写出单个环的指数生成函数:A(x)=i=1n(i1)!i!xi=i=1nixi[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]=(n1)![nn1]=Cn2[nn2]=(n1)!×i=1n1i1[nn2]=2Cn3+3Cn4k=0n[nk]=n!

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值