此文章涉及到斯特林数性质及斯特林反演,例题总结与应用篇\(\Longrightarrow\)点这里
\({\large\color{SpringGreen}{历史小芝士}}\)
在组合数学中,斯特林\((Stirling)\)数可指两类数,第一类斯特林数和第二类斯特林数
这些均由\(18\)世纪数学家\(James Stirling\)提出的,并在著作《\(Methodous Differentialis\)》中首次使用
自此,斯特林数成为又一广泛运用到处理组合问题的一大利器
\({\large\color{SpringGreen}{第一类斯特林数}}\)
定义
\(\begin{bmatrix}n\\m \end{bmatrix}\)表示\(n\)个元素分成\(m\)个环的方案数
显然:\[\begin{bmatrix}n\\m \end{bmatrix}=\begin{bmatrix}n-1\\m-1 \end{bmatrix}+(n-1)*\begin{bmatrix}n-1\\m \end{bmatrix}\]
理解:考虑从\(n-1\)个元素推过来,如果两个空环肯定是不符合的
\(~~~~~~~~~~\)空一个环则单独成环,如果\(n-1\)的时候就没有空环就任意放在一个元素前
性质
- \(n!=\sum\limits_{i=0}^n \begin{bmatrix}n\\i \end{bmatrix}\)
理解:其实本质就是置换,一个环则为一组轮换,每种排列都会对应着唯一 一种置换
- \(x^{\underline n}=\sum\limits_{i=0}^n \begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i}x^i\\\)
归纳法:
\[\begin{aligned}\\ x^{\underline {n+1}}&=(x-n)x^{\underline n}\\ &=(x-n)\sum\limits_{i=0}^n \begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i}x^i\\ &=x\sum\limits_{i=0}^{n} \begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i}x^{i}-n\sum\limits_{i=0}^n \begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i} x^i\\ &=\sum\limits_{i=0}^{n} \begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i}x^{i+1}-n\sum\limits_{i=0}^{n+1} \begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i} x^i\\ &=\sum\limits_{i=1}^{n+1} \begin{bmatrix}n\\i-1 \end{bmatrix}(-1)^{n-i+1}x^{i}+n\sum\limits_{i=0}^{n+1} \begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i+1} x^i\\ &=\sum\limits_{i=1}^{n+1} ( \begin{bmatrix}n\\i-1 \end{bmatrix} +n*\begin{bmatrix}n\\i \end{bmatrix})(-1)^{n-i+1}x^{i}\\ &=\sum\limits_{i=1}^{n+1} \begin{bmatrix}n+1\\i \end{bmatrix}(-1)^{n-i+1}x^{i}\\ &=\sum\limits_{i=0}^{(n+1)} \begin{bmatrix}n+1\\i \end{bmatrix}(-1)^{(n+1)-i}x^{i}\\ \end{aligned}\]
- \(x^{\overline n}=\sum_{i=0}^n \begin{bmatrix}n\\i \end{bmatrix}x^i\)
证明类上,不再赘述
求第一类斯特林数
- \[\sum_{i=0}^n \begin{bmatrix}n\\i \end{bmatrix}x^i=\prod_{i=0}^{n-1}(x+i)\]
\(\begin{array}{c c c}~&0&1&2&3&4\\0&0&0&0&0&0\\1&0&1&0&0&0\\2&0&1&1&0&0\\3&0&2&3&1&0\\4&0&6&11&6&1\end{array}\)
其实把表刷出来就差不多了,可以理解为根据\(\begin{bmatrix}n\\m \end{bmatrix}=\begin{bmatrix}n-1\\m-1 \end{bmatrix}+(n-1)*\begin{bmatrix}n-1\\m \end{bmatrix}\)逐渐转移
至此,我们可以通过分治\(FFTO(nlog^2n)\)求出一行的第一类斯特林数
- 还有一种类似于多项式求逆模式\(O(nlogn)\)的方法
\[F(x)^n=\prod\limits_{i=0}^{n-1}(x+i),F(x)^{2n}=F(x)^nF(x+n)^n\]
考虑当我们求出\(F(x)^n=\sum\limits_{i=0}^{n}a_ix^i\):
\[\begin{aligned}\\ F(x+n)^{n}&=\sum\limits_{i=0}^{n}a_i(x+n)^i\\ &=\sum\limits_{i=0}^na_i\sum\limits_{j=0}^i{i\choose j}n^{i-j}x^j\\ &=\sum\limits_{i=0}^n(\sum\limits_{j=i}^n {j\choose i}n^{j-i}a_j)x^i\\ &=\sum\limits_{i=0}^n(\sum\limits_{j=i}^n \frac{j!}{i!(j-i)!}n^{j-i}a_j)x^i\\ &=\sum\limits_{i=0}^n (i!)^{-1}x^i (\sum\limits_{j=i}^n (\frac{n^{j-i}}{(j-i)!})\cdot (j!a_j))\\ \end{aligned}\]
我们通过左半部分系数能得到右半部分系数,再相乘一下就得到了总体的系数
Code
留有少量注释
#include
typedef long long LL;
const LL mod=998244353,g=3,maxn=1e6+9;
inline LL Pow(LL base,LL b){
LL ret(1);
while(b){
if(b&1) ret=ret*base%mod; base=base*base%mod; b>>=1;
}return ret;
}
LL r[maxn];
inline LL Fir(LL n){
LL limit(1),len(0);
while(limit<(n<<1)){
limit<<=1; ++len;
}
for(LL i=0;i>1]>>1)|((i&1)<>1);++i) std::swap(H[i],H[len-i]);
for(LL i=len+1;i=1;--i) fav[i-1]=fav[i]*i%mod;
Solve(n,ans);
for(LL i=0;i<=n;++i) printf("%lld ",ans[i]);printf("\n");
return 0;
}
\({\large\color{SpringGreen}{第二类斯特林数}}\)
定义
\(\begin{Bmatrix}n\\m\end{Bmatrix}\)表示\(n\)个有区别的小球丢进\(m\)个无区别的盒子,无空盒子的方案数
显然:\[\begin{Bmatrix}n\\m\end{Bmatrix}=\begin{Bmatrix}n-1\\m-1\end{Bmatrix}+m*\begin{Bmatrix}n-1\\m\end{Bmatrix}\]
理解:考虑从\(n-1\)个小球推过来,如果两个空盒子肯定是不符合的
\(~~~~~~~~~~\)空一个盒子则只能放到那个空盒子里面了,如果\(n-1\)的时候就没有空箱子就随便放
性质
\[m^n=\sum_{i=0}^{m}\begin{Bmatrix}n\\i\end{Bmatrix}*i!*C(m,i)\]
当然也可以写成:\[m^n=\sum\limits_{i=0}^m \begin{Bmatrix}n\\i\end{Bmatrix}*m^{\underline i}\]
到后面反演时我们会这样写:\[m^n=\sum\limits_{i=0}^n \begin{Bmatrix}n\\i\end{Bmatrix}*m^{\underline i}\]
看看后面的\(m^{\underline i}\)就懂了
理解:\(m^n\)为\(n\)个有区别的小球丢进\(m\)个有区别的盒子,允许空盒子
\(~~~~~~~~~~\)枚举有效盒子的个数,再从\(m\)个盒子选\(i\)个盒子,然后\(n\)个小球丢进\(i\)个盒子
转换到组合表示
第二类斯特林数显然是和排列组合有关系的,转换过来:\[\begin{Bmatrix}n\\m\end{Bmatrix}=\frac{1}{m!}\sum\limits_{k=0}^m(-1)^kC(m,k)(m-k)^n\]
理解:如果空箱子的情况我们也算进去,答案显然是\(\frac{m^n}{m!}\)
\(~~~~~~~~~~\)反过来求第二类斯特林数,又得减掉这种情况:
\(~~~~~~~~~~\)选\(k\)个空盒子,然后小球放到其他的盒子里
\(~~~~~~~~~~\)但最后我们求出来的答案为有区别的盒子,转换过来要\(×\frac{1}{m!}\)
求第二类斯特林数
大概都能猜到是卷积形式了吧,随手展开一下:
\[\begin{aligned}\\ \begin{Bmatrix}n\\m\end{Bmatrix}&=\frac{1}{m!}\sum\limits_{k=0}^m(-1)^k\frac{m!}{k!(m-k)!}(m-k)^n\\ &=\sum\limits_{k=0}^m\frac{(-1)^k(m-k)^n}{k!(m-k)!}\\ \end{aligned}\]
至此,我们能实现\(O(nlogn)\)求出\(S(n)\)这一行的第二类斯特林
第二类斯特林数与自然数幂的关系
\[\begin{aligned}\\ Sum(n)&=\sum\limits_{i=0}^n i^k\\ &=\sum\limits_{i=0}^n\sum\limits_{j=0}^k\begin{Bmatrix}k\\j \end{Bmatrix}i^{\underline j}\\ &=\sum\limits_{j=0}^k\begin{Bmatrix}k\\j \end{Bmatrix}\sum\limits_{i=0}^n i^{\underline j}\\ &=\sum\limits_{j=0}^k \begin{Bmatrix}k\\j \end{Bmatrix}j!\sum\limits_{i=0}^nC_i^j\\ &=\sum\limits_{j=0}^k \begin{Bmatrix}k\\j \end{Bmatrix}j!C_{n+1}^{j+1}\\ &=\sum\limits_{j=0}^k \begin{Bmatrix}k\\j \end{Bmatrix} \frac{(n+1)^{\underline {j+1}}}{j+1}\\ \end{aligned}\]
关于\(\sum\limits_{i=0}^nC_i^j=C_{n+1}^{j+1}\)的理解:枚举\(j+1\)的右端点\(i+1\),则相当于从\(i\)个点中选\(j\)个点
\({\large\color{SpringGreen}{斯特林反演}}\)
定义
斯特林反演:\(f(n)=\sum\limits_{k=0}^n \begin{Bmatrix}n\\k \end{Bmatrix}g(k)\Longleftrightarrow g(n)=\sum\limits_{k=0}^n(-1)^{n-k}\begin {bmatrix} n\\k \end{bmatrix}f(k)\)
总结上面我们所推倒的性质
- \(x^{\underline n}=\sum\limits_{i=0}^n \begin{bmatrix}n\\i \end{bmatrix}(-1)^{n-i}x^i,x^{\overline n}=\sum_{i=0}^n \begin{bmatrix}n\\i \end{bmatrix}x^i\)
- \(m^n=\sum\limits_{i=0}^n \begin{Bmatrix}n\\i\end{Bmatrix}*m^{\underline i}\)
补充
\[x^{\underline n}=(-1)^n (-x)^{\overline n},x^{\overline n}=(-1)^n (-x)^{\underline n}\]
前置
我们先证这个反转公式
\[\begin{aligned}\displaystyle \sum_{k=m}^n (-1)^{n-k}\begin{bmatrix}n\\k\end{bmatrix} \begin{Bmatrix}k\\m\end{Bmatrix}=[m=n]\\ \sum_{k=m}^n (-1)^{n-k}\begin{Bmatrix}n\\k\end{Bmatrix} \begin{bmatrix}k\\m\end{bmatrix}=[m=n]\end{aligned}\]
反转公式1:
\[\begin{aligned}\\ m^{\underline n}&=\sum\limits_{i=0}^n \begin{bmatrix}n\\i\end{bmatrix}(-1)^{n-i}m^i\\ &=\sum\limits_{i=0}^n \begin{bmatrix}n\\i\end{bmatrix}(-1)^{n-i}\sum\limits_{j=0}^i \begin{Bmatrix}i\\j\end{Bmatrix}m^{\underline j}\\ &=\sum\limits_{i=0}^n m^{\underline i}\sum\limits_{j=i}^n (-1)^{n-j} \begin{bmatrix}n\\j\end{bmatrix} \begin{Bmatrix}j\\i\end{Bmatrix}\\ \end{aligned}\]
反转公式2:
\[\begin{aligned}\\ m^n&=\sum\limits_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}m^{\underline i}\\ &=\sum\limits_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}(-1)^i(-m)^{\overline i}\\ &=\sum\limits_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}(-1)^i\sum\limits_{j=0}^i \begin{bmatrix}i\\j\end{bmatrix}(-m)^j\\ &=\sum\limits_{i=0}^n m^i\sum\limits_{j=i}^n(-1)^{i-j} \begin{Bmatrix}n\\j\end{Bmatrix}\begin{bmatrix}j\\i\end{bmatrix}\\ \end{aligned}\]
推式
已知:\(g(n)=\sum\limits_{k=0}^n(-1)^{n-k}\begin {bmatrix} n\\k \end{bmatrix}f(k)\)
\[\begin{aligned}\\ f(n)&=\sum\limits_{k=0}^n [k=n]f(k)\\ &=\sum\limits_{k=0}^n\sum\limits_{j=k}^n \begin {Bmatrix} n\\j \end{Bmatrix}\begin {bmatrix} j\\k \end{bmatrix}(-1)^{j-k}f(k)\\ &=\sum\limits_{k=0}^n \begin {Bmatrix} n\\k \end{Bmatrix}\sum\limits_{j=0}^k (-1)^{k-j}\begin {bmatrix} k\\j \end{bmatrix}f(j)\\ &=\sum\limits_{k=0}^n \begin {Bmatrix} n\\k \end{Bmatrix}g(k)\\ \end{aligned}\]
\({\large\color{SpringGreen}{斯特林数应用}}\)
总结