版权声明:转载必须注明原文链接,并且每50字(半角,向上取整)就要注明一次,侵权必究 https://blog.csdn.net/myjs999/article/details/86298595
多项式多点求值
给定
n个值
xi,求
f(xi)。
设
f0(x)=∑i=02n−1f(xi),
P0(x)=∏i=02n−1x−xi。则有
f(x)=P0(x)z(x)+f0(x)其中
z(x)是某一多项式。
于是对于
i<2n,有
f(xi)=(fmodP0)(xi)。后一半同样。递归计算即可,每次用分治卷积和多项式取模,复杂度为
O(nlog2n)。
多项式快速插值
给定
n个二元组
(xi,yi),求
F(x)使
F(xi)=yi。
由拉格朗日插值公式,
F(x)=i∑∏j≠i(xi−xj)∏j≠i(x−xj)⋅yi
设
M(x)=∏i(x−xi),则
F(x)=i∑xi−xiM(xi)∏j≠i(x−xj)⋅yi
F(x)=i∑M′(xi)∏j≠i(x−xj)⋅yi
此时可以用多项式多点求值求出所有的
M′(xi)。设
Ai=M′(xi)yi,则等式变为
F(x)=i∑Aij≠i∏(x−xj)
分治即可。设两半边答案分别为
F0(x)、
F1(x),则
F(x)=F0(x)i=mid+1∏r(x−xi)+F1(x)i=l∏mid(x−xi)
复杂度为
O(nlog2n)。
*2019.01.11 13:30:18