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

不写代码。

多项式多点求值

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

做法

考虑分治,设 L(x)=i=1n2(xxi)R(x)=i=n2+1n(xxi),那么对于 i[1,n2]F(xi)=(F mod L)(xi),对于 i(n2+1,n]F(xi)=(F mod R)(xi)。多项式取模即可,每次的 L(x)R(x) 可以分治 NTT 预处理。时间复杂度 O(nlog2n)

多项式快速插值

给出 n 个点 (xi,yi),求一个 n1 次的多项式 f(x),使得 f(xi)yi(mod998244353)

做法

考虑拉格朗日插值:

F(x)=i=1nji(xxj)ji(xixj)yi

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

于是 F(x)=i=1nji(xxj)yip(xi),分治处理:设 L(x)=i=1n2(xxi)R(x)=i=n2+1n(xxi),于是

F(x)=R(x)i=1n2yip(xi)j=1n2[ji](xxj)+L(x)i=n2+1nyip(xi)j=n2+1n[ji](xxj)

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

posted @   came11ia  阅读(139)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示