斯特林数&斯特林反演
第一类斯特林数
定义
第一类Stirling数\(s(n,m)\),也可记为\(\begin{bmatrix}n\\m\end{bmatrix}\)。
第一类Stirling分为无符号第一类Stirling数\(s_u(n,m)\)和带符号第一类Stirling数\(s_s(n,m)\)。
他们分别表现为其升阶函数和降阶函数的各项系数,形式如下:
x^{n\uparrow}=x\cdot (x+1)\cdot (x+2)\cdots(x+n-1)=\sum_{k=0}^ns_u(n,k)\cdot x^k
\]
无符号Stirling数更为常用,表示将\(n\)个不同元素构成\(m\)个圆排列的数目。
有无符号Stirling之间有关系式\(s_s(n,m)=(-1)^{n+m}\cdot s_u(n,m)\)。
递推式
无符号第一类Stirling数
设元素有编号\(1,2,...,n\),则将\(n\)个元素构成\(m\)个圆有两种情况:
①把第\(n\)个元素单独作为一个圆,用前\(n-1\)个元素构成\(m-1\)个圆,方案数\(\begin{bmatrix}n-1\\m-1\end{bmatrix}\)。
②用前\(n-1\)个元素构成\(m\)个圆,把第\(n\)个元素插在前\((n-1)\)个元素任意一个之前,方案数\((n-1)\cdot \begin{bmatrix}n-1\\m\end{bmatrix}\)。
综上:
\]
赋初值\(s(0,0)=1\)。
有符号第一类Stirling数
可以从其表示的降阶函数归纳证明:
\]
依次把\(x^m\)的左右两边的系数提取出来得:
\]
用分治+NTT求第一类Stirling数
以求无符号第一类Stirling数为例:
因为可以表示为升阶函数的各项系数,即:
\]
我们可以用分治的思想,每次处理一半的多项式来NTT,时间复杂度\(O(n\log^2n)\)。
代码实现
int rev[N];
void NTT(int *a,int x,int K){
int n=(1<<x);
for(int i=0;i<n;i++)if(i<rev[i])swap(a[i],a[rev[i]]);
for(int i=1;i<n;i<<=1){
int tmp=i<<1,wn=ksm(3,(mod-1)/tmp);
if(K==-1)wn=ksm(wn,mod-2);
for(int j=0;j<n;j+=tmp){
int w=1;
for(int k=0;k<i;k++,w=(LL)w*wn%mod){
int x=a[j+k],y=(LL)w*a[i+j+k]%mod;
a[j+k]=(x+y)%mod;a[i+j+k]=(x-y+mod)%mod;
}
}
}
if(K==-1){
int inv=ksm(n,mod-2);
for(int i=0;i<n;i++)a[i]=(LL)a[i]*inv%mod;
}
}
void Binary(int *a,int l,int r){
if(l==r)return a[0]=l,a[1]=1,void();//有符号赋值a[0]=-l;
int mid=l+r>>1;
int f[N],g[N];
memset(f,0,(r-l+1)<<3),memset(g,0,(r-l+1)<<3);
Binary(f,l,mid),Binary(g,mid+1,r);
int x=ceil(log2(r-l+2));
for(int i=0;i<(1<<x);i++)rev[i]=(rev[i>>1]>>1)|((i&1)<<x-1);
NTT(f,x,1),NTT(g,x,1);
for(int i=0;i<(1<<x);i++)a[i]=(LL)f[i]*g[i]%mod;
NTT(a,x,-1);
}
例题
第二类斯特林数
定义
第二类Stirling数记为\(S(n,m)\)或者\(\begin{Bmatrix}n\\m\end{Bmatrix}\) 。
第二类Stirling数实际上是集合的一个拆分,表示将n个不同的元素拆分成m个集合的方案数。
常常用于解决组合数学中几类放球模型;
描述为:将n个不同的球放入m个无差别的盒子中,要求盒子非空,有几种方案?
由容斥原理可以得到其通项公式:
\]
递推式
设元素有编号\(1,2,...,n\),则将\(n\)个元素构成\(m\)个集合有两种情况:
①把第\(n\)个元素单独作为一个集合,用前\(n-1\)个元素构成\(m-1\)个集合,方案数\(\begin{Bmatrix}n-1\\m-1\end{Bmatrix}\)。
②用前\(n-1\)个元素构成\(m\)个集合,把第\(n\)个元素插入任意一个集合之中,方案数\(m\cdot \begin{Bmatrix}n-1\\m\end{Bmatrix}\)。
综上:
\]
赋初值:\(S(0,0)=1\)。
两类Stirling数之间的关系
\]
推论&总结
对原式二项式反演可得
\]
等价于
\]
可以用于计算其他式子。
比如:
&\sum_{i=0}^ni^k=\sum_{i=0}^k\begin{Bmatrix}k\\i\end{Bmatrix}i!\binom{n+1}{i+1}\\
&\sum_{i=1}^ni^k\binom ni=\sum_{i=0}^k\begin{Bmatrix}k\\i\end{Bmatrix}i!\binom ni2^{n-i}
\end{split}
\]
例题
将通项公式再化一下:
\]
这是一个形如\(\sum_{i=0}^mf(i)*g(m-i)\)的卷积的形式,可以用FFT快速计算。
第一个多项式的第\(i\)项系数为\(\frac {(-1)^i}{i!}\);第二个多项式的第\(i\)项系数为\(\frac {i^n}{i!}\)。
两式相乘,第\(i\)项的系数即为\(S(n,i)\)。
例题
其他题目
斯特林反演
\iff g(n)=\sum_{k=0}^n(-1)^{n-k}\begin {bmatrix} n\\k \end{bmatrix}f(k)
\]
证明斯特林反演
首先,我们需要考虑如何建立上升阶乘幂与下降阶乘幂之间的关系。
结论:
x^{n\uparrow}=(-1)^n(-x)^{n\downarrow}
\]
证明:
(-1)^n(-x)^{n\uparrow}&=(-1)^n(-x)(-x+1)\cdots(-x+n-1)\\
&=(-1)^n(-x)(-(x-1))\cdots(-(x-n+1))\\
&=x(x-1)\cdots(x-n+1)\\
&=x^{n\downarrow}
\end{split}
\]
同理可证\(x^{n\uparrow}=(-1)^n(-x)^{n\downarrow}\)。
接下来,我们需要证一个叫反转公式的东西:
还是先给出结论:
\sum_{i=m}^n(-1)^{n-i}\begin{Bmatrix}n\\i\end{Bmatrix}\begin{bmatrix}i\\m\end{bmatrix}=[m=n]
\]
证明:
n^m&=\sum_{i=0}^m\begin{Bmatrix}m\\i\end{Bmatrix}n^{i\downarrow}\\
&=\sum_{i=0}^m\begin{Bmatrix}m\\i\end{Bmatrix}(-1)^i(-n)^{i\uparrow}
\end{split}
\]
将\(x^{n\uparrow}=\sum\limits_{k=0}^ns_u(n,k)\cdot x^k\)带入:
n^m&=\sum_{i=0}^m\begin{Bmatrix}m\\i\end{Bmatrix}(-1)^i\sum_{j=0}^i\begin{bmatrix}i\\j\end{bmatrix}(-n)^j\\
&=\sum_{j=0}^mn^j\sum_{i=j}^m\begin{Bmatrix}m\\i\end{Bmatrix}\begin{bmatrix}i\\j\end{bmatrix}(-1)^{i-j}
\end{split}
\]
即:
\]
这个与上面的式2等价,于是我们就证出了其中一个反转公式。
m^{n\downarrow}&=\sum_{i=0}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}m^i\\
&=\sum_{i=0}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\sum_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix}m^{j\downarrow}\\
&=\sum_{j=0}^nm^{j\downarrow}\sum_{i=j}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\begin{Bmatrix}i\\j\end{Bmatrix}
\end{split}
\]
即:
\]
由此证出了式1。
然后,我们就可以证明斯特林反演了:
若满足\(g(n)=\sum\limits_{j=0}^n(-1)^{n-j}\begin{bmatrix}n\\j\end{bmatrix}f(j)\),则
f(n)&=\sum_{j=0}^n[j=n]f(j)\\
&=\sum_{j=0}^n\sum_{k=j}^n\begin{Bmatrix}n\\k\end{Bmatrix}\begin{bmatrix}k\\j\end{bmatrix}(-1)^{k-j}f(j)\\
&=\sum_{k=0}^n\begin{Bmatrix}n\\k\end{Bmatrix}\sum_{j=0}^k(-1)^{k-j}\begin{bmatrix}k\\j\end{bmatrix}f(j)\\
&=\sum_{k=0}^n\begin{Bmatrix}n\\k\end{Bmatrix}g(k)
\end{split}
\]
例题
斯特林数&斯特林反演的更多相关文章
- CF961G Partitions(第二类斯特林数)
题目 CF961G 前置 斯特林数\(\Longrightarrow\)斯特林数及反演总结 做法 相信大家能得出一个一眼式:\[Ans=\sum\limits_{i=1}^n w_i\sum\limi ...
- [国家集训队] Crash 的文明世界(第二类斯特林数)
题目 [国家集训队] Crash 的文明世界 前置 斯特林数\(\Longrightarrow\)斯特林数及反演总结 做法 \[\begin{aligned} ans_x&=\sum\limi ...
- [HEOI2016/TJOI2016]求和(第二类斯特林数)
题目 [HEOI2016/TJOI2016]求和 关于斯特林数与反演的更多姿势\(\Longrightarrow\)点这里 做法 \[\begin{aligned}\\ Ans&=\sum\l ...
- CF932E Team Work(第二类斯特林数)
题目 CF932E Team Work 前置:斯特林数\(\Longrightarrow\)点这里 做法 \[\begin{aligned}\\ &\sum\limits_{i=1}^n C_ ...
- 【51NOD 1847】奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数)
[51NOD 1847]奇怪的数学题(莫比乌斯反演,杜教筛,min_25筛,第二类斯特林数) 题面 51NOD \[\sum_{i=1}^n\sum_{j=1}^nsgcd(i,j)^k\] 其中\( ...
- 数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群)
数学杂烩总结(多项式/形式幂级数+FWT+特征多项式+生成函数+斯特林数+二次剩余+单位根反演+置换群) 因为不会做目录所以请善用ctrl+F 本来想的是笔记之类的,写着写着就变成了资源整理 一些有的 ...
- bzoj5093图的价值:多项式,斯特林数(二项式反演)
Description “简单无向图”是指无重边.无自环的无向图(不一定连通). 一个带标号的图的价值定义为每个点度数的k次方的和. 给定n和k,请计算所有n个点的带标号的简单无向图的价值之和. 因为 ...
- BZOJ.5093.[Lydsy1711月赛]图的价值(NTT 斯特林数)
题目链接 对于单独一个点,我们枚举它的度数(有多少条边)来计算它的贡献:\[\sum_{i=0}^{n-1}i^kC_{n-1}^i2^{\frac{(n-2)(n-1)}{2}}\] 每个点是一样的 ...
- BZOJ5093 [Lydsy1711月赛]图的价值 【第二类斯特林数 + NTT】
题目链接 BZOJ5093 题解 点之间是没有区别的,所以我们可以计算出一个点的所有贡献,然后乘上\(n\) 一个点可能向剩余的\(n - 1\)个点连边,那么就有 \[ans = 2^{{n - 1 ...
随机推荐
- AGC001[BCDE] 题解
A没意思 F太难 所以大概近期的AGC题解都是BCDE的 然后特殊情况再说 开始刷AGC的原因就是计数太差 没有脑子 好几个学长都推荐的AGC所以就开始刷了 = = 大概两天三篇的速度?[可能也就最开 ...
- 【Eureka】实现原理
Eureka Client 拉取Eureka Server中的全量注册表 注册自身实例InstanceInfo至Eureka Server 初始化定时任务 心跳(续约)任务 拉取增量注册表更新本地注册 ...
- Git项目实战篇
版本控制器:Git # 达到多人协同开发的目的 安装 """1.下载对应版本:https://git-scm.com/download2.安装git:在选取安装路径的下一 ...
- 阿里云李刚:下一代低延时的直播CDN
在上周落幕帷幕的多媒体领域技术盛会——LiveVideoStackCon音视频技术大会上,阿里云的高级技术专家李刚进行了<下一代低延时的直播CDN>技术分享.主讲人李刚,多年关注在CDN这 ...
- linux 基础命令总结
1.mkdir 创建目录 -p 创建多级目录 mkdir -p /data/test -m, --mode=模式 设置权限模式(类似chmod),而不是rwxrwxrwx 减umask -p, --p ...
- 最强DE战斗力
最强DE战斗力 时间限制: 1 Sec 内存限制: 128 MB提交: 40 解决: 14[提交][状态] 题目描述 春秋战国时期,赵国地大物博,资源非常丰富,人民安居乐业.但许多国家对它虎视眈眈 ...
- Jdk1.8 之 Integer类源码浅析
先看一下它的继承.实现关系: public final class Integer extends Number implements Comparable<Integer> Number ...
- Ionic4 入门
1.搭建环境 1.电脑安装node.js,安装后电脑会自动安装npm 2.通过cmd命令,安装cnpm npm install -g cnpm -registry=https://regist ...
- GHCi Prelude学习
参考:http://www.cse.unsw.edu.au/~en1000/haskell/inbuilt.html http://www.cse.unsw.edu.au/~en1000/haskel ...
- Java + selenium 元素定位(2)之By LinkText/PartialLinkText
本章介绍的两种方法都是对于网页上的文字链接的定位操作.根据名字,我们就可以看出来,这两者其实很相似,那么他们的不同在哪里呢. By LinkText()方法,是对一个的网页超链接,我们所需要输入的关键 ...