高阶差分求解多项式求和
高阶差分求解多项式求和
高阶差分
记 \(\Delta f(x)=f(x+1)-f(x)\)。称 \(\Delta f(x)\) 为 \(f(x)\) 的一阶差分。
同理:记 \(\Delta^n f(x)=\Delta^{n-1}f(x+1)-\Delta^{n-1} f(x)\) 。称 \(\Delta^n f(x)\) 为 \(f(x)\) 的 \(n\) 阶差分。
下面给出差分的几个比较重要的性质。
性质 \(1\):若 \(f(x)\) 为度为 \(n\) 的多项式,则 \(\Delta^{n+1} f(x)=0\)。
证明:
不难发现 \(\Delta f(x)\) 的 \(x^n\) 项的系数为 \(0\)。
所以 \(\Delta f(x)\) 为度为 \(n-1\) 的多项式。
又由于 \(\Delta^n f(x)=\Delta^{n-1}f(x+1)-\Delta^{n-1} f(x)\)。
不难归纳出 \(\Delta^{k} f(x)\) 的度数为 \(n-k\)。当 \(k=n\) 是 \(\Delta^k f(x)\) 已经是常数了,再做一次差分归 \(0\)。
性质 \(2\) :
证明:
利用数学归纳法。当 \(r=1\) 的显然成立(直接带入发现一致)
若 \(r\le m\) 时此式成立,则设 \(r=m\)。我们只需证明 \(r+1\) 时该式同样成立即可。
根据定义有:
证毕。
正题
高阶差分可以用来处理这样一类问题:
求 \(\sum_{i=1}^nf(i)\times q^i\)。
其中 \(f(i)\) 是一个度为 \(k\) 的多项式。
当 \(q=0\) 时。答案是 \(0\)。
当 \(q=1\) 时,我们发现就是求一个多项式的前缀和。我们知道一个度为 \(n\) 的多项式的前缀和是一个度为 \(n+1\) 的多项式,所以我们直接拉格朗日插值即可。
当 \(q>1\) 时。
引入一个结论:
设 \(S(n)=\sum_{i=0}^{n-1}f(i)\times q^i\) 则存在一个度为 \(k\) 的多项式 \(G(x)\) 使得 \(S(n)=q^n\times G(n)-G(0)\)
证明如下:
依旧是采用数学归纳法,当 \(k=0\) 时显然成立。
假设当 \(k\le m\) 时成立,我们让 \(k=m+1\)。
注意到 \(f(i)-f(i-1)\) 是一个差分的形式,那么它的度应该是 \(k-1\)。此时命题成立,那么我们将 \(\sum_{i=0}^{n-1}(f(i)-f(i-1))\times q^i\) 替换成 \(q^n\times P(n)-P(0)\),其中 \(P(x)\) 是一个度为 \(k-1\) 的多项式,那么有:
我们设 \(G(x)=\dfrac{P(x)-f(x-1)}{1-q}\)。易知 \(G(x)\) 是一个度为 \(k\) 的多项式。(\(f(x-1)\) 的度为 \(k\))
那么有:
证毕。
\(S(n)=\sum_{i=0}^{n-1}f(i)\times q^i=q^n\times G(n)-G(0)\)。
所以答案就应该是:
\(f(0)\) 一般来说是比较好求的。
问题是如何快速求出 \(G(n+1)\) 和 \(G(0)\)。
由于 \(G\) 是一个度为 \(k\) 的多项式,只要我们能算出 \(G(0)\dots G(k)\)。那么就可以通过插值插出 \(G(n+1)\)。
问题转化成求 \(G(0)\)。
还是依靠差分:
所以所有 \(G(n)\) 都可以用 \(k\times G(0)+b\) 的形式表示出来。
但是我们只是得到了关系式,\(G(0)\) 的值我们依然不知道。
既然都差分了那就差分到底
回顾下高阶差分的性质 \(1,2\)。因为 \(G(x)\) 是一个度为 \(k\) 的多项式,所以 \(\Delta^{k+1}G(x)=0\)。也就是:
而令人振奋的这一点是所有的 \(G(i)\) 都可以用 \(G(0)\) 表示!所以这其实是一个一元的方程!我们直接运用解出来 \(G(0)\) 即可。
那么上述问题就被解决了。复杂度是 \(O(k+\log n)\) 的(基本上是线性的,显然插值此时也是线性,\(\log n\) 在于预处理求逆元)。当然如果你比较懒一边算一边求逆元的话就是 \(O(k\log n)\) 的了。也是比较优秀的的,不至于有人还卡这个。