多项式与点值式

多项式与点值式

正常\(\text{DFT/IDFT}\)是构造一个特殊的点值式,即\(x_i=\omega_{n}^i\)

如果能通过题目条件构造出来这样的点值,就可以直接\(\text{DFT/IDFT}\)

那如果不能的话。。。。。

多项式多点求值

一个多项式\(F(x)\)我们求它在\(x_0,x_0,\cdots x_{m-1}\)上的点值

核心是分治+多项式取模

对于当前分治区间\([l,r]\in[0,m-1]\)

我们需要快速构造一个长度为\(\frac{r-l+1}{2}\)的多项式进入分治区间

那么构造\(G(x)_{l,r}=\prod_l^r(1-x_i)\)

由于\(G(x_l)_{l,r}=\cdots=G(x_r)_{l,r}=0\)

所以可以将\(F(x)\)对于\(G(x)_{l,mid}\)和\(G(x)_{mid+1,r}\)分别取模之后进入递归子区间

递归到\([l=r]\)时,\(F(x)\)只剩下常数项

需要被访问的\(G(x)\)可以预先跑一遍分治NTT求出

那么复杂度就是\(O(n\log ^2n)\)

\[\ \]


多项式快速插值

对于点对\((x_i,y_i)\)

多项式拉格朗日插值的式子是

\[\begin{aligned}F(x) = \sum_{i=0}^{n-1} y_i \prod_{i\ne j} \frac{x-x_j}{x_i-x_j}\end{aligned} \]

那么需要快速求出\(\prod \frac{1}{x_i-x_j}\)

构造多项式\(G(x)=\prod (x-x_i)\)

那么\(\prod (x_i-x_j)=\frac{G}{x-x_i}(x_i)\)

由于\(G(x),x-x_i\)在\(x_i\)上的点值均为\(0\)

带入洛必达法则\(\frac{G}{x-x_i}(x_i)=\frac{G'}{(x-x_i)'}(x_i)=G'(x_i)\)

那么求出\(G'(x_i)\)多项式多点求值即可

剩下那一部分可以简单地分治合并上来,\([l=r]\)时,多项式是一个常数

合并上来时

\([l,mid]\)的答案补上\(\prod_{mid+1}^r (x-x_i)\)

\([mid+1,r]\)的答案补上\(\prod_{l}^{mid} (x-x_i)\)

即复杂度为\(O(n\log ^2n)\)

垃圾评测机模板题卡了好久


上一篇:数据库-检索数据


下一篇:Redis常见应用场景