感觉我正在日益沦为一个搬运工...
线性插值是指这样一个问题:给定整数\(n,m\),以及一个\(n\)次多项式\(f\)在\(0,1,2,\dots,n-1\)处的点值,即\(f(0),f(1),f(2),\dots,f(n-1)\),希望能在关于\(n\)的线性时间内求出\(f(m)\)。\(n\leq 10^6,m\leq 10^{18}\)。
利用多项式多点插值并求一次点值可以做到\(O(n\log^2n)\),但显然是过不去的。
我们考虑多项式\(f\)的牛顿级数,设其为\(c\),即:
\[\sum_{i=0}^{n-1}f_ix^i=\sum_{i=0}^{n-1}c_i{x\choose i}
\]
那么对于\(m=0,1,2,\dots,n-1\),显然有:
\[f(m)=\sum_{i=0}^{n-1}c_i{m\choose i}
\]
注意到当\(i\geq m\)时\({m\choose i}\)为\(0\),于是修改求和上限:
\[f(m)=\sum_{i=0}^mc_i{m\choose i}
\]
这就是经典的二项式反演的形式,于是我们就得到:
\[c_i=\sum_{j=0}^i(-1)^{i-j}{i\choose j}f(j)
\]
进回带到求和上限为\(n-1\)的式中,于是有:
\[f(m)=\sum_{i=0}^{n-1}\Bigg({m\choose i}\sum_{j=0}^i(-1)^{i-j}{i\choose j}f(j)\Bigg)
\]
套路一波,将对\(j\)的求和放到外面:
\[f(m)=\sum_{j=0}^{n-1}\Bigg(f(j)\sum_{i=j}^{n-1}(-1)^{i-j}{m\choose i}{i\choose j}\Bigg)
\]
为了直观,我们用\(i\)替换\(i-j\):
\[f(m)=\sum_{j=0}^{n-1}\Bigg(f(j)\sum_{i=0}^{n-1-j}(-1)^i{m\choose i+j}{i+j\choose j}\Bigg)
\]
利用\({m\choose i+j}{i+j\choose j}={m\choose j}{m-j\choose i}\)进行替换,得到:
\[f(m)=\sum_{j=0}^{n-1}\Bigg(f(j)\sum_{i=0}^{n-1-j}(-1)^i{m\choose j}{m-j\choose i}\Bigg)
\]
于是\({m\choose j}\)可以放到前面:
\[f(m)=\sum_{j=0}^{n-1}\Bigg(f(j){m\choose j}\sum_{i=0}^{n-1-j}(-1)^i{m-j\choose i}\Bigg)
\]
现在考虑求出下面的式子的封闭形式:
\[\sum_{i=0}^{n-1}(-1)^i{m\choose i}
\]
首先是应用上指标反转使\((-1)^i{m\choose i}={i-m-1\choose i}\):
\[\sum_{i=0}^{n-1}{i-m-1\choose i}
\]
考虑加入一个数\({-m-1\choose -1}=0\):
\[{-m-1\choose -1}+\sum_{i=0}^{n-1}{i-m-1\choose i}
\]
裂项:
\[{-m-1\choose -1}+{-m-1\choose 0}+\sum_{i=1}^{n-1}{i-m-1\choose i}
\]
\[{-m\choose 0}+\sum_{i=1}^{n-1}{i-m-1\choose i}
\]
一直重复,直到只剩下:
\[{n-m-1\choose n-1}
\]
再进行上指标反转:
\[(-1)^{n-1}{m-1\choose n-1}
\]
于是原式终于可以简化为:
\[f(m)=\sum_{j=0}^{n-1}\Bigg(f(j){m\choose j}(-1)^{n-1-j}{m-1-j\choose n-1-j}\Bigg)
\]
整理,得:
\[f(m)=\sum_{i=0}^{n-1}(-1)^{n-1-i}{m\choose i}{m-1-i\choose n-1-i}f(i)
\]
用阶乘展开组合数:
\[f(m)=\sum_{i=0}^{n-1}(-1)^{n-1-i}\frac{m!}{i!(m-i)!}\frac{(m-1-i)!}{(n-1-i)!(m-n)!} f(i)
\]
继续整理:
\[f(m)=m^{\underline n}\sum_{i=0}^{n-1}\frac{(-1)^{n-1-i}}{(m-i)i!(n-1-i)!}f(i)
\]
于是就可以做了,\(m-i\)的逆元可以用与预处理阶乘逆元的类似方法做到线性。总复杂度是\(O(n)\)。
\(\rm upd\):被强大的姐姐打脸了...其实直接用拉格朗日插值公式即可推出和上面一样的东西...所以这篇文章只是想说数学真奇妙。