多项式理论 PartⅡ- 从多项式多点求值插值到常系数齐次线性递推
一、多项式多点求值
适用于求给定多项式 \(F\) 的 \(m\) 个点值 \(F(a_1),F(a_2),\cdots,F(a_m)\) 的问题。
可以观察到 \(F(x_0)=F(x)\bmod(x-x_0)\),故可以将 \(m\) 个点值分为尽量平均的两部分,每个部分递归下去时提前对 \(\prod\limits_{x_0\in S}(x-x_0)\) 取模即可,时间复杂度为 \(\mathcal{O}(n\log^2n)\),其中 \(n=\deg F\) 且视其与 \(m\) 同阶。
二、多项式多点插值
适用于给定多项式 \(F\) 的 \(\deg F+1\) 个点值 \((x_i,y_i)\),求 \(F\)。
由拉格朗日插值公式知 \(F(x)=\sum\limits_{i}y_i\prod\limits_{j\ne i}\dfrac{x-x_j}{x_i-x_j}\),其中 \(\prod\limits_{j\ne i}(x_i-x_j)=\lim\limits_{x\rightarrow x_i}\dfrac{\prod\limits(x-x_j)}{x-x_i}\),对此不定式使用洛必达法,则若设 \(G(x)=\prod(x-x_j)\),则其等于 \(G'(x_i)\)。
此时可以计算出系数 \(a_i=G'(x_i)\cdot y_i\) 使得 \(F(x)=\sum\limits_{i}a_i\prod\limits_{j\ne i}(x-x_j)\),使用分治 NTT 即可做到 \(\mathcal{O}(n\log^2 n)\),其中 \(n=\deg F\)。
三、常系数齐次线性递推
适用于给定数列 \(a\) 的初始项和递推关系,求满足 \(k\) 阶齐次线性递推数列 \(a\) 的第 \(n\) 项。
此问题有许多方式可以做到 \(\tilde{\mathcal{O}}(\deg F)\):
- 设递推关系的特征多项式为 \(F\),求解 \(x^k\bmod F(x)\)。
- 基于 Cayley-Hamilton 的算法。
- 求解分式对应项问题(Bostan-Mori 算法)和求解常系数齐次线性递推问题的相互转化。
关于第三种算法的双向构造:
- \(\Leftarrow\):令 \(\dfrac{F(x)}{G(x)}=H(x)\),则 \(n>\deg F\) 时有 \([x^n]F(x)=0\),故 \(\sum\limits_{i=0}^{\deg G}\left([x^i]G(x)\right)\left([x^{n-i}]H(x)\right)\),故 \(h_i=\sum\limits_{j=1}^{\deg G}\dfrac{-g_j}{g_0}\cdot h_{i-j}\)。
- \(\Rightarrow\):与上述过程类似,只需构造对应的 \(g\) 即可(不妨令 \(g\) 常数项为 \(1\),则这样的 \(g\) 是唯一的)。