多项式从入门到入土

开始了学习多项式秃头的旅途

拉格朗日插值

(f(x)=sumlimits_{i=1}^{n}y_i prodlimits_{j!=i} frac{x-x_i}{x_i-x_j})

如果题目中要求直接求(f(k))的话

可以直接用以下的公式(废话

(f(k)=sumlimits_{i=1}^{n}y_i prodlimits_{j!=i} frac{k-x_i}{x_i-x_j})

P4781 【模板】拉格朗日插值

拉格朗日插值扩展

在绝大多数题目中我们需要用到的(x_i)的取值都是连续的,这样的话我们可以把上面的算法优化到(O(n))复杂度

那么式子变成(f(k)=sumlimits_{i=0}^{n}y_i prod limits_{i eq j} frac{k-j}{i-j})

优化后面那一部分

记录一下分子的前缀积((pre_{i-1}))和后缀积((nex_{i+1})),然后折半相乘

分子的话就是阶乘(fac[i]*fac[n-i])

(update:)这里错了,应该是(fac[i-1]*fac[n-i])(lgj)学长的博客里面写错了

最后得到式子(f(k)=sumlimits_{i=0}^{n}y_ifrac{pre_{i-1}*nex_{i+1}}{fac[i-1]*fac[n-i]})

注意分母的符号问题,当(n-i)是奇数时,应该是负号

CF622F The Sum of the k-th Powers

重心拉格朗日插值法

(g=prodlimits_{i=0}^{n}k-x_i)

[f(k)=gsumlimits_{i=0}^{n}prod limits_{i eq j} frac{y_i}{(k-x_i)(x_i-x_j)} ]

(t_i=prodlimits_{i eq j}frac{y_i}{(x_i-x_j)})

[f(k)=gsumlimits_{i=0}^{n}frac{t_i}{k-x_i} ]

所有每次新加入一个点的时候只需要计算它的(t_i)

例题

题目难度按照由易到难排序

P4781 【模板】拉格朗日插值

CF622F The Sum of the k-th Powers

P4593 [TJOI2018]教科书般的亵渎

[large ext {暂时入土,未完待续} ]

原文地址:https://www.cnblogs.com/pyyyyyy/p/13089430.html