特殊计数序列——第一类斯特林(stirling)数

第一类斯特林数

在这里我因为懒所以还是用\(S(n,m)\)表示第一类斯特林数,但一定要和第二类斯特林数区分开来

递推式

\(S(n,m)=S(n-1.m-1)+S(n-1,m)*(n-1)\)

其中\(S(0,0)=1,S(i,0)=0(i>0)\)

组合意义

\(n\)个元素组成\(m\)个圆排列的方案数

注意这里圆排列指的是两个排列经过旋转能重合的算一种方案

那么递推式就可以这样理解:对于当前的第\(n\)个元素,单独成一个圆排列有\(S(n-1,m-1)\)种方案,放在其它的圆排列中有\(S(n-1,m)*(n-1)\)种方案,即放在每个元素的左侧(右侧等价于另一个元素的左侧)

性质

1、\(S(n,1)=(n-1)!\)

圆排列定义

2、\(\sum_{i=1}^{n}S(n,i)=n!\)

我们知道\(1-n\)\(n\)个元素能形成\(n!\)个个排列,也就是\(n!\)个置换,而将置换写成循环的形式,这又对应着一个圆排列,于是就建立起了\(n\)排列和第一类斯特林数一一对应的关系

3、\(x^\underline{n}=\sum_{i=0}^nS(n.i)(-1)^{n-i}x^i\)\(x^\overline{n}=\sum_{i=0}^nS(n,i)x^i\)

证明的话考虑数学归纳法,这里仅给出第一条的证明
\[ \begin{aligned} x^{\underline{n+1}}=&(x-n)x^{\underline{n}}\\ =&(x-n)\sum_{i=0}^nS(n,i)(-1)^{n-i}x^i\\ =&\sum_{i=0}^nS(n,i)(-1)^{n-i}x^{i+1}-n\sum_{i=0}^nS(n,i)(-1)^{n-i}x^i\\ =&\sum_{i=1}^{n+1}S(n,i-1)(-1)^{n-i+1}x^i+n\sum_{i=0}^nS(n.i)(-1)^{n-i+1}x^i\\ =&\sum_{i=0}^{n}(S(n,i-1)+nS(n.i))(-1)^{n-i}x^i\\ =&\sum_{i=0}^{n}S(n+1,i)(-1)^{n-i}x^i \end{aligned} \]

求解第一类斯特林数

最普通的方法就是\(O(n^2)\)的递推啦,考虑有没有更优的方法

我们先丢结论:
\[ S(n,m)=[x^m]\prod_{i=0}^{n-1}(x+i) \]
计算右式的话可以使用分治+NTT在\(O(nlog^2n)\)的时间内解决,但是这么做的理由是什么?

设现在求的是\(S(n,m)\)我们记\(f_n(x)=\prod_{i=0}^{n-1}(x+1)\),然后把这个式子写成类似于递推的形式:
\[ f_n(x)=(x+n-1)f_{n-1}(x)=xf_{n-1}(x)+(n-1)f_{n-1}(x) \]
第一项\(xf_{n-1}(x)\)就相当于\(S(n-1,m-1)\),第二项\((n-1)f_{n-1}(x)\)就相当于\((n-1)*S(n-1,m)\),也就是说这个式子对应的递推式就是\(S(n,m)=S(n-1,m-1)+(n-1)*S(n-1,m)\),正确性也就显然了

转载于:https://www.cnblogs.com/encodetalker/p/10780832.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值