stirling(斯特林)数相关

本文深入探讨了两类Stirling数的定义与递推公式,详细解析了球与盒子问题的八种计数情况,介绍了第二类Stirling数的通项公式及其与自然数幂和的关系,讲解了Bell数的概念及其生成函数,揭示了Stirling数与幂、上升幂、下降幂之间的转换公式,最后阐述了Stirling反演原理。

一.两类stirling数的定义及递推公式.

第一类stirling数:定义第一类stirling数S1(n,m)S_1(n,m)S1(n,m)表示nnn个有标号的球分成mmm个无标号的非空轮换的方案数.

这里的轮换定义为旋转同构但翻转不同构,也就是说1,2,3,41,2,3,41,2,3,42,3,4,12,3,4,12,3,4,1是同一个轮换,但1,2,3,41,2,3,41,2,3,44,3,2,14,3,2,14,3,2,1不是同一个轮换.

第一类stirling数的递推公式分为两种情况转移:
1.把最后一个球单独放在一个轮换中,方案数为S1(n−1,m−1)S_1(n-1,m-1)S1(n1,m1).
2.把最后一个球放在某个轮换的某个球之前,方案数为(n−1)S1(n−1,m)(n-1)S_1(n-1,m)(n1)S1(n1,m).

那么得到第一类stirling数递推公式
S1(n,m)=S1(n−1,m−1)+(n−1)S1(n−1,m) S_1(n,m)=S_1(n-1,m-1)+(n-1)S_1(n-1,m) S1(n,m)=S1(n1,m1)+(n1)S1(n1,m)

第二类stirling数:定义第二类stirling数S2(n,m)S_2(n,m)S2(n,m)表示nnn个有标号的球分成mmm个无标号的非空集合的方案数.

与第一类stirling数类似的,第二类stirling数的递推公式同样分为两种情况转移:
1.把最后一个球单独放在一个集合中,方案数为S2(n−1,m−1)S_2(n-1,m-1)S2(n1,m1).
2.把最后一个球放在某个集合中,方案数为mS2(n−1,m)mS_2(n-1,m)mS2(n1,m).

那么得到第二类stirling数递推公式
S2(n,m)=S2(n−1,m−1)+mS2(n−1,m) S_2(n,m)=S_2(n-1,m-1)+mS_2(n-1,m) S2(n,m)=S2(n1,m1)+mS2(n1,m)



二.球与盒子的问题.

球与盒子的问题指的是将nnn个球放入mmm个盒子的计数问题,主要根据球有无标号,盒有无标号,是否可以有空盒分为888种情况.

接下来我们一一讨论这888种情况的解决方案.

情况1:球无标号,盒有标号,不允许空盒.

插板法,答案为(n−1m−1)\binom{n-1}{m-1}(m1n1).

情况2:球无标号,盒有标号,允许空盒.

插板法,答案为(n+m−1n)\binom{n+m-1}{n}(nn+m1).

情况3:球无标号,盒无标号,不允许空盒.

fi,jf_{i,j}fi,j表示iii个球放入jjj个盒子的方案数,分两种情况讨论:
1.每个盒子中放入一个球,方案数为fi−j,jf_{i-j,j}fij,j.
2.将一个球放入一个盒子,方案数为fi−1,j−1f_{i-1,j-1}fi1,j1.

综合起来就是:
fi,j=fi−j,j+fi−1,j−1 f_{i,j}=f_{i-j,j}+f_{i-1,j-1} fi,j=fij,j+fi1,j1

情况4:球无标号,盒无标号,允许空盒.

与情况3类似的有:
fi,j=fi−j,j+fi,j−1 f_{i,j}=f_{i-j,j}+f_{i,j-1} fi,j=fij,j+fi,j1

情况5:球有标号,盒有标号,允许空盒.

每个球可以放入有mmm种选择,答案为mnm^{n}mn.

情况6:球有标号,盒无标号,不允许空盒.

答案为第二类stirling数,即S2(n,m)S_2(n,m)S2(n,m).

情况7:球有标号,盒无标号,允许空盒.

对第二类stirling数求和,即:
∑i=0mS2(n,i) \sum_{i=0}^{m}S_2(n,i) i=0mS2(n,i)

情况8:球有标号,盒有标号,不允许空盒.

一个办法是对第二类stirling数乘上mmm的全排列,即m!S2(n,m)m!S_2(n,m)m!S2(n,m).

另一种办法是利用二项式反演,设fif_ifi表示nnn个有标号的球在不允许空盒的情况下放入iii个有标号的盒子的方案数,那么有:
mn=∑i=0m(mi)fi⇔fm=∑i=0m(−1)m−i(mi)in m^{n}=\sum_{i=0}^{m}\binom{m}{i}f_i\Leftrightarrow f_m=\sum_{i=0}^{m}(-1)^{m-i}\binom{m}{i}i^{n} mn=i=0m(im)fifm=i=0m(1)mi(im)in



三.第二类stirling数的通项公式.

fi=i!S2(n,i)f_i=i!S_2(n,i)fi=i!S2(n,i)代入第二个式子中我们可以得到:
m!S2(n,m)=∑i=0m(−1)m−i(mi)inS2(n,m)=∑i=0m(−1)ii!(m−i)n(m−i)! m!S_2(n,m)=\sum_{i=0}^{m}(-1)^{m-i}\binom{m}{i}i^{n}\\ S_2(n,m)=\sum_{i=0}^{m}\frac{(-1)^{i}}{i!}\frac{(m-i)^{n}}{(m-i)!} m!S2(n,m)=i=0m(1)mi(im)inS2(n,m)=i=0mi!(1)i(mi)!(mi)n

这是第二类stirling数通项公式.

容易看出,第二类stirling数的通项公式是一个卷积形式,利用NTT,我们可以在O(m(log⁡n+log⁡m))O(m(\log n+\log m))O(m(logn+logm))的时间复杂度内求出一行第二类stirling数.


四.自然数幂和与第二类stirling数.

fi=i!S2(n,i)f_i=i!S_2(n,i)fi=i!S2(n,i)代入第一个式子中我们可以得到:
mn=∑i=0m(mi)i!S2(n,i)=∑i=0nS2(n,i)mi‾ m^{n}=\sum_{i=0}^{m}\binom{m}{i}i!S_2(n,i)=\sum_{i=0}^{n}S_2(n,i)m^{\underline{i}}\\ mn=i=0m(im)i!S2(n,i)=i=0nS2(n,i)mi

将这个结论带入自然数幂和:
∑i=1nik=∑i=1n∑j=0i(ij)j!S2(k,j)=∑i=0ni!S2(k,i)∑j=in(ji)=∑i=0ni!S2(k,i)(n+1i+1)=∑i=0ni!(n+1)i+1‾(i+1)!S2(k,i)=∑i=0n(n+1)i+1‾i+1S2(k,i)=∑i=0k(n+1)i+1‾i+1S2(k,i) \sum_{i=1}^{n}i^{k}\\ =\sum_{i=1}^{n}\sum_{j=0}^{i}\binom{i}{j}j!S_2(k,j)\\ =\sum_{i=0}^{n}i!S_2(k,i)\sum_{j=i}^{n}\binom{j}{i}\\ =\sum_{i=0}^{n}i!S_2(k,i)\binom{n+1}{i+1}\\ =\sum_{i=0}^{n}i!\frac{(n+1)^{\underline{i+1}}}{(i+1)!}S_2(k,i)\\ =\sum_{i=0}^{n}\frac{(n+1)^{\underline{i+1}}}{i+1}S_2(k,i)\\ =\sum_{i=0}^{k}\frac{(n+1)^{\underline{i+1}}}{i+1}S_2(k,i) i=1nik=i=1nj=0i(ji)j!S2(k,j)=i=0ni!S2(k,i)j=in(ij)=i=0ni!S2(k,i)(i+1n+1)=i=0ni!(i+1)!(n+1)i+1S2(k,i)=i=0ni+1(n+1)i+1S2(k,i)=i=0ki+1(n+1)i+1S2(k,i)

这样就能做到O(klog⁡k)O(k\log k)O(klogk)处理自然数幂和了.


五.Bell数.

对第二类stirling数有了更加深入的探讨后,我们再引入它的一行和Bell数.

Bell数:Bell数BnB_nBn定义为:
Bn=∑i=0nS2(n,i) B_n=\sum_{i=0}^{n}S_2(n,i) Bn=i=0nS2(n,i)

其组合意义为将nnn个有标号的球划分为若干个无标号的集合的方案数.

我们已经可以做到O(nlog⁡n)O(n\log n)O(nlogn)求出单个Bell数,但是这个做法用到了常数大且较为难写的NTT,并不优秀.

来试着将其写成更好计算的形式:
Bn=∑i=0nS2(n,i)=∑i=0n∑j=0i(−1)jj!(i−j)n(i−j)!=∑i=0n(−1)ii!∑j=in(j−i)n(j−i)!=∑i=0n(−1)ii!∑j=0n−ijnj! B_n=\sum_{i=0}^{n}S_2(n,i)\\ =\sum_{i=0}^{n}\sum_{j=0}^{i}\frac{(-1)^{j}}{j!}\frac{(i-j)^{n}}{(i-j)!}\\ =\sum_{i=0}^{n}\frac{(-1)^{i}}{i!}\sum_{j=i}^{n}\frac{(j-i)^{n}}{(j-i)!}\\ =\sum_{i=0}^{n}\frac{(-1)^{i}}{i!}\sum_{j=0}^{n-i}\frac{j^{n}}{j!} Bn=i=0nS2(n,i)=i=0nj=0ij!(1)j(ij)!(ij)n=i=0ni!(1)ij=in(ji)!(ji)n=i=0ni!(1)ij=0nij!jn

现在只需要对jnj!\frac{j^{n}}{j!}j!jn这个式子求前缀和,就可以直接做到O(nlog⁡n)O(n\log n)O(nlogn)求解单个Bell数了.


六.Bell数的生成函数.

这个方法可以做到O(nlog⁡n)O(n\log n)O(nlogn)求解所有i∈[1,n]i\in [1,n]i[1,n]的Bell数BiB_iBi.

首先根据Bell数的组合意义,我们枚举最后一个数所在的集合大小,可以得到如下递推式:
Bn+1=∑i=0n(ni)Bn−i B_{n+1}=\sum_{i=0}^{n}\binom{n}{i}B_{n-i} Bn+1=i=0n(in)Bni

BnB_nBn的指数型生成函数为B(x)B(x)B(x),根据上式容易得到:
B′(x)=B(x)exB′(x)B(x)=ex∫B′(x)B(x)dx=ex−1ln⁡B(x)=ex−1B(x)=eex−1 B'(x)=B(x)e^{x}\\ \frac{B'(x)}{B(x)}=e^{x}\\ \int \frac{B'(x)}{B(x)}\mathrm{d}x=e^{x}-1\\ \ln B(x)=e^{x}-1\\ B(x)=e^{e^{x}-1} B(x)=B(x)exB(x)B(x)=exB(x)B(x)dx=ex1lnB(x)=ex1B(x)=eex1

利用多项式exp⁡\expexp即可做到O(nlog⁡n)O(n\log n)O(nlogn)求解.


七.两类stirling数与三种幂.

首先,我们可以尝试得到上升幂和下降幂之间的关系:
xn‾=∏i=0n−1(x−i)=(−1)n∏i=0n−1(−x+i)=(−1)n(−x)n‾xn‾=∏i=0n−1(x+i)=(−1)n∏i=0n−1(−x−i)=(−1)n(−x)n‾ x^{\underline{n}}=\prod_{i=0}^{n-1}(x-i)=(-1)^{n}\prod_{i=0}^{n-1}(-x+i)=(-1)^{n}(-x)^{\overline{n}}\\ x^{\overline{n}}=\prod_{i=0}^{n-1}(x+i)=(-1)^{n}\prod_{i=0}^{n-1}(-x-i)=(-1)^{n}(-x)^{\underline{n}} xn=i=0n1(xi)=(1)ni=0n1(x+i)=(1)n(x)nxn=i=0n1(x+i)=(1)ni=0n1(xi)=(1)n(x)n

然后,我们在上面已经得到了幂和下降幂之间的关系:
xn=∑i=0nS2(n,i)xi‾ x^{n}=\sum_{i=0}^{n}S_2(n,i)x^{\underline{i}} xn=i=0nS2(n,i)xi

xxx换成−x-xx,我们可以得到幂和上升幂之间的关系:
(−x)n=∑i=0nS2(n,i)(−x)i‾(−x)n=∑i=0n(−1)iS2(n,i)xi‾xn=∑i=0n(−1)n−iS2(n,i)xi‾ (-x)^{n}=\sum_{i=0}^{n}S_2(n,i)(-x)^{\underline{i}}\\ (-x)^{n}=\sum_{i=0}^{n}(-1)^{i}S_2(n,i)x^{\overline{i}}\\ x^{n}=\sum_{i=0}^{n}(-1)^{n-i}S_2(n,i)x^{\overline{i}} (x)n=i=0nS2(n,i)(x)i(x)n=i=0n(1)iS2(n,i)xixn=i=0n(1)niS2(n,i)xi

我们发现只有第二类stirling数为系数的关系式,于是猜想一个第一类stirling数为系数的关系式:
xn‾=∑i=0nS1(n,i)xi x^{\overline{n}}=\sum_{i=0}^{n}S_1(n,i)x^{i} xn=i=0nS1(n,i)xi

归纳证明后发现它是对的,于是再次将xxx−x-xx可以得到:
xn‾=∑i=0n(−1)n−iS1(n,i)xi x^{\underline{n}}=\sum_{i=0}^{n}(-1)^{n-i}S_1(n,i)x^{i} xn=i=0n(1)niS1(n,i)xi

于是我们得到了在幂和上升幂、下降幂之间转化的公式.


八.stirling反演.

我们将下降幂与幂的关系式代入幂与下降幂的关系式可以得到:
xn=∑i=0nS2(n,i)xi‾=∑i=0nS2(n,i)∑j=0i(−1)i−jS1(i,j)xj=∑i=0n∑j=0i(−1)i−jS2(n,i)S1(i,j)xj=∑i=0n∑j=in(−1)j−iS2(n,j)S1(j,i)xi x^{n}=\sum_{i=0}^{n}S_2(n,i)x^{\underline{i}}\\ =\sum_{i=0}^{n}S_2(n,i)\sum_{j=0}^{i}(-1)^{i-j}S_1(i,j)x^{j}\\ =\sum_{i=0}^{n}\sum_{j=0}^{i}(-1)^{i-j}S_2(n,i)S_1(i,j)x^{j}\\ =\sum_{i=0}^{n}\sum_{j=i}^{n}(-1)^{j-i}S_2(n,j)S_1(j,i)x^{i} xn=i=0nS2(n,i)xi=i=0nS2(n,i)j=0i(1)ijS1(i,j)xj=i=0nj=0i(1)ijS2(n,i)S1(i,j)xj=i=0nj=in(1)jiS2(n,j)S1(j,i)xi

取出其中第iii项:
[n=i]xi=∑j=in(−1)j−iS2(n,j)S1(j,i)xi [n=i]x^{i}=\sum_{j=i}^{n}(-1)^{j-i}S_2(n,j)S_1(j,i)x^{i} [n=i]xi=j=in(1)jiS2(n,j)S1(j,i)xi

同时除以xix^{i}xi得到反转公式
[n=i]=∑j=in(−1)j−iS2(n,j)S1(j,i) [n=i]=\sum_{j=i}^{n}(-1)^{j-i}S_2(n,j)S_1(j,i) [n=i]=j=in(1)jiS2(n,j)S1(j,i)

于是我们猜想stirling反演
fn=∑i=0nS2(n,i)gi⇔gn=∑i=0n(−1)n−iS1(n,i)fi f_n=\sum_{i=0}^{n}S_2(n,i)g_i\Leftrightarrow g_n=\sum_{i=0}^{n}(-1)^{n-i}S_1(n,i)f_i\\ fn=i=0nS2(n,i)gign=i=0n(1)niS1(n,i)fi

代入验证:
fn=∑i=0nS2(n,i)gi=∑i=0nS2(n,i)∑j=0i(−1)i−jS1(i,j)fj=∑i=0n∑j=0i(−1)i−jS2(n,i)S1(i,j)fj=∑i=0n∑j=in(−1)j−iS2(n,j)S1(j,i)fj=∑i=0n[n=i]fi=fn f_n=\sum_{i=0}^{n}S_2(n,i)g_i\\ =\sum_{i=0}^{n}S_2(n,i)\sum_{j=0}^{i}(-1)^{i-j}S_1(i,j)f_j\\ =\sum_{i=0}^{n}\sum_{j=0}^{i}(-1)^{i-j}S_2(n,i)S_1(i,j)f_j\\ =\sum_{i=0}^{n}\sum_{j=i}^{n}(-1)^{j-i}S_2(n,j)S_1(j,i)f_j\\ =\sum_{i=0}^{n}[n=i]f_i\\ =f_n fn=i=0nS2(n,i)gi=i=0nS2(n,i)j=0i(1)ijS1(i,j)fj=i=0nj=0i(1)ijS2(n,i)S1(i,j)fj=i=0nj=in(1)jiS2(n,j)S1(j,i)fj=i=0n[n=i]fi=fn

同理我们可以得到另一个反转公式stirling反演
∑j=in(−1)j−iS1(n,j)S2(j,i)=[n=i]fn=∑i=0nS1(n,i)gi⇔gn=∑i=0n(−1)n−iS2(n,i)fi \sum_{j=i}^{n}(-1)^{j-i}S_1(n,j)S_2(j,i)=[n=i]\\ f_n=\sum_{i=0}^{n}S_1(n,i)g_i\Leftrightarrow g_n=\sum_{i=0}^{n}(-1)^{n-i}S_2(n,i)f_i j=in(1)jiS1(n,j)S2(j,i)=[n=i]fn=i=0nS1(n,i)gign=i=0n(1)niS2(n,i)fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值