[学习笔记] 多项式多点求值与快速插值

不写代码。

多项式多点求值

给定一个 \(n\) 次多项式 \(f(x)\) ,对于 \(i \in [1,m]\) 求出 \(f(a_i)\)

做法

考虑分治,设 \(L(x) = \prod_{i=1}^{\frac{n}{2}} (x - x_i)\)\(R(x) = \prod_{i = \frac{n}{2} + 1}^n (x - x_i)\),那么对于 \(i \in [1,\frac{n}{2}]\)\(F(x_i) = (F \ \mathrm{mod} \ L)(x_i)\),对于 \(i \in ( \frac{n}{2}+1, n ]\)\(F(x_i) = (F \ \mathrm{mod} \ R)(x_i)\)。多项式取模即可,每次的 \(L(x)\)\(R(x)\) 可以分治 NTT 预处理。时间复杂度 \(O(n \log ^2n)\)

多项式快速插值

给出 \(n\) 个点 \((x_i, y_i)\),求一个 \(n-1\) 次的多项式 \(f(x)\),使得 \(f(x_i)\equiv y_i\pmod{998244353}\)

做法

考虑拉格朗日插值:

\[F(x) = \sum_{i=1}^n \frac{\prod_{j \neq i}(x - x_j)}{\prod_{j \neq i}(x_i - x_j)} y_i \]

分母是一个常数,设 \(p(x) = \prod_{i=1}^n (x - x_i)\),那么对于每个 \(i\),分母相当于 \(\frac{p(x)}{x - x_i}\) 代入 \(x = x_i\) 后的值,但这是未定义的。不过根据洛必达法则,它的值即为 \(p'(x_i)\),于是我们可以先用分治 NTT 算 \(p(x)\),求导算出 \(p'(x)\),然后多点求值求出每个 \(i\) 对应分母的值。

于是 \(F(x) = \sum_{i=1}^n \prod_{j \neq i} (x - x_j) \frac{y_i}{p'(x_i)}\),分治处理:设 \(L(x) = \prod_{i=1}^{\frac{n}{2}} (x - x_i)\)\(R(x) = \prod_{i = \frac{n}{2} + 1}^n (x - x_i)\),于是

\[F(x) = R(x) \sum_{i=1}^{\frac{n}{2}} \frac{y_i}{p'(x_i)} \prod_{j = 1}^{\frac{n}{2}} [j \neq i](x - x_j) + L(x) \sum_{i=\frac{n}{2}+1}^{n} \frac{y_i}{p'(x_i)} \prod_{j=\frac{n}{2}+1}^{n} [j \neq i](x - x_j) \]

递归计算即可,每次的 \(L(x)\)\(R(x)\) 可以分治 NTT 预处理。时间复杂度 \(O(n \log ^2n)\)

posted @ 2022-07-08 15:06  came11ia  阅读(132)  评论(0编辑  收藏  举报