闲话 24.10.13

闲话

还有不到两周就 csp-j/s 了(
祝大家别挂分(

没有闲话题材了啊!

今日推歌:花朵 by 合目 feat. 诗岸

那些你不要的:拉格朗日……插值?

给定 n,k。给定一个 n 阶多项式 f(x),以及 k 个无重根首一多项式 f1(x),,fk(x),第 i 个多项式的次数为 mi>0f(x) 给定系数,fi(x) 给定 mi 个根。对每个 i 求算 f(x)modfi(x)

1imi,n105

一个高等代数的做法是这样的:令 ri(x)=f(x)modfi(x),那么其为满足 f(x)=q(x)fi(x)+r(x)r(x) 中最短者。而带入 fi(x)=j=1mi(xxj)mi 个根知道 r(xj)=f(xj)。则显然通过拉格朗日插值能确定这个最短多项式 ri(x)
那么对一般的情况,只需要对 f(x) 和这 mi 个根运行多点求值,再分别运行快速插值即可。总时间复杂度 O(nlog2n),常数*可能*不是很大。

另一个由古典多点求值算法导出的做法是这样的:注意到对 f(x),m1(x),m2(x)f(x)modm1(x)=(f(x)modm1(x)m2(x))modm1(x),那么先求出 fi(x) 的多项式形式,把它们排成一排,按照度数之和每次从近似中点先合并,再分治取模即可。总时间复杂度也是 O(nlog2n),常数听说不小。

所以说上面那个做法其实没啥实际作用,而且限制挺大的,比如 fi(x) 都要无重根。当然如果 f(x) 和需要的信息够特殊,比如能 O(n)f(x) 做多点求值,并且不需要求最短多项式的系数而是远点求值,那总复杂度就可以优化到 O(n) 了。

根据 jjdw 的阐述,我们可以不直接用拉格朗日插值,而且甚至可以不需要无重根的性质。那么我们接下来不使用无重根性质,即 fi(x)=j=1mi(xxj)cj。如果我们能求算每个 f(x)mod(xxj)cj,那么根据多项式 CRT,存在一种方法计算 f(x)modj=1mi(xxj)cj。那么这种方法是什么呢?

回忆一下多项式 CRT 的构造:取 fi(x)=j=1mi(xxj)cj,pj(x)=(xxj)cj,以及 fi(x)/pj(x)modpj(x) 意义下的逆元 vj(x)=[fi(x)/pj(x)modpj(x)]1modpj(x)。那么 ri(x)=j=1mif(xj)fi(x)/(xxj)vj(x)。那么要对每个 1jmi 求算 vj(x)。首先考虑求算 Pj(x)=fi(x)/pj(x)modpj(x),这个直接通过分治树即可得到。接下来考虑求逆。考虑代换 t=xxj,容易发现这变换是保度数的,因此我们只需要先求 Pj(t+xj) 在模 tcj 意义下的逆,然后代换回去即可。
上面的内容摘自 分式分解,给小朋友们做现场的表演

这个还是 O(nlog2n) 的,分治树那一部分的常数感觉和上面第二个做法没啥区别啊。

然而最重要的一点就是:给定根这个性质太少见了。所以到目前为止这个东西还停留在理性愉悦阶段。

posted @   joke3579  阅读(146)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2022-10-13 闲话 22.10.13
点击右上角即可分享
微信分享提示