差分序列与 Stirling 数
刚看完《组合数学》的这一节,写一点笔记。
差分序列
定义
设一个序列:
的一阶差分序列为:
其中:
同样,将差分出来的序列再次进行差分,可以得到二阶差分序列。因此,我们定义零阶差分序列就是原序列,
差分序列有一种求导的意味。
多项式的差分序列
多项式
我们发现
可以证明,一个
首先考虑
现在进行归纳假设:假设对于
观察最高次数的项,在每一次差分中的变化:
由于
差分的线性性
如果:
那么:
由此我们证明了差分是一个线性变换。这称为差分的线性性。
特殊差分表
在差分表中:
称第一横行为第
考虑一下由下面的对角线构成的差分表会是怎样的数列构成的:
首先,这个差分表后面全部变成了
其中
同时,我们注意到
换言之:
是不是感觉很神奇?这一结论可以推广到任意位置的
如果
$\Delta f(n)$ 的第$0$ 条对角线为$c_0,\ c_1,\ c_2,\ c_3,\ ...,\ c_p,\ 0,\ 0,\ ...$ ,那么1:
$$ f(n) = \sum_{k=0}^p c_k{n \choose k}$$
此时你也许会想问这东西有什么用?由于它是对于一个多项式的差分分析得到的结论,因此,我们对于一个多项式,如果知道了第
并且,根据 Pascal 公式,我们可以知道:
所以:
所以,当我们拥有了这个结论之后,我们就可以以同样的代价来计算它的前缀和。
现在来考虑一个具体一点并且不是很复杂的问题,但是可能当场并不能解决它:
给你
$T$ 次询问,每次给出$n$ 和$p$ ,要求你计算:
$$ \sum_{a = 1}^n a^p \pmod{10^9 + 7} $$
$1 \leqslant T \leqslant 5000$ ,$1 \leqslant p \leqslant 5000$ ,$1 \leqslant n \leqslant 10^{18}$ 。
如果采用直接计算
对此,我们设
那么答案就是:
第二类 Stirling 数
定义
有第二类 Stirling 数就有第一类 Stirling 数,但是由于第二类 Stirling 数可以帮助我们解决之前的问题,所以先介绍它。
第二类 Stirling 数的用途是使用下降幂来表示数的幂。下降幂是这样的一种东西:
回到前面的问题,可以发现:
所以设:
为第二类 Stirling 数。并且满足:
同时注意一下它的边界值:
不妨来考虑一下:
通过比较同一项的系数,我们可以得知下面的递推式:
解决之前的问题
在之前的问题中,我们知道:
对于后面的式子,我们发现可以通过递推算出
其实,根据第二类 Stirling 数的递推公式,我们也可以类似的推出
读者可以自己试一试。
但是这还不是这个问题的最优解法。使用伯努利数和快速傅里叶变换,我们可以得到更好的复杂度。这里就没有介绍了。
另外,使用拉格朗日插值法也可以快速求解这个问题,具体的可以参见这篇博客。
组合意义
现在来考虑一下这个简单问题:
求
$p$ 个人,放入$k$ 个相同的房子 (房子不可以为空) 的方案数。
不难我们可以想出一个递推2:设
对于其正确性,考虑两点:
- 如果第
$p$ 个人单独进入一个房间,那么方案数为$f(p - 1,\ k - 1)$ 。 - 如果第
$p$ 个人进入之前的房间,那么它可以挑选之前的$k$ 个房间的任意一间,即方案数为$kf(p - 1,\ k)$ 。
同时我们注意到:
并且:
也就是
对于这个问题,我们可以从容斥原理的角度来获得另外一个不同的公式。设
注意在之前的推导里面我们区分了这
考虑到如果有
这也就是计算单个第二类 Stirling 数的公式。
第一类 Stirling 数
定义
现在来介绍第一类 Stirling 数。与第二类 Stirling 数相反,第一类 Stirling 数是使用整数的幂次来表示下降幂。
现在来观察一下规律:
可以发现,下降幂展开以后是一个系数正负号交替的多项式。与在第二类 Stirling 数中类似的,我们设
以及边界值:
类似的,我们可以据此推出第二类 Stirling 数的递推公式:
通过比较同次项的系数可以得知:
组合意义
同样的,第一类 Stirling 数也具有其组合意义。通过考虑下面的问题就可以证明:
求
$p$ 个人围成$k$ 个圈 (圈不能为空) 的方案数。
注意这里的圈中的人的顺序不同也会视为圈不同。
对于这个问题,我们证明其答案
证明:
- 如果第
$p$ 个人独自站成一个圈,那么共有$f(p - 1,\ k - 1)$ 种方案。 - 如果第
$p$ 个人与之前的人站在一起,那么他有$p - 1$ 种方案站在一个人的右边,所以共有$(p - 1)f(p - 1,\ k)$ 中方案。
不难验证这个问题的初始条件与第一类 Stirling 数一致,所以