多点求值与暴力插值

暴力插值

给你 \(n\) 个点 \((x_i,y_i)\) ,要求求出这个 \(n\) 次多项式 \(F(x)\)

我们有
\[
F(x)=\sum_{i=1}^ny_i\frac{\!\prod\limits_{1\le j\le n,i\not=j}\!\!\!\!(x-x_j)}{\!\prod\limits_{1\le j\le n,i\not=j}\!\!\!\!(x_i-x_j)}
\]
感性愉悦认识一下这个拉格朗日插值

复杂度 \(O(n^2)\)


多点求值

给你 \(X=\{x_0,x_1,x_2,\dots,x_{m-1}\}\) 和 一个 \(n\) 次多项式 \(A\) ,要求求出 \(Y=\{A(x_0),A(x_1),A(x_2),\dots,A(x_{m-1})\}\)

将需要求的点值分成两个子任务 \(X_1=\{x_0,x_1,\dots,x_{\lfloor\frac{m}{2}\rfloor}\},X_2=\{x_{\lfloor\frac{m}{2}\rfloor+1},x_{\lfloor\frac{m}{2}\rfloor+2},\dots,x_{m-1}\}\)

若已经完成了 \(X_1\) 与 \(X_2\) 两个子任务的多点求值,且分别用 \(X_1\) 与 \(X_2\) 两个集合中的点插值得到的多项式为 \(A_1(x),A_2(x)\)

考虑构造两个多项式 \(P_1(x)=\prod\limits_{0\le i\le \lfloor\frac{m}{2}\rfloor}(x-x_i)\) , \(P_2(x)=\prod\limits_{\lfloor\frac{m}{2}\rfloor<i<m}(x-x_i)\)

考虑 \(A(x)=Q_1(x)P_1(x)+A_1(x)\) ,我们将 \(x\in X_1\) 的点代入,发现左边这个式子是成立的。

于是我们可以得到 \(A_1(x)=A(x) \bmod P_1(x)\)

对 \(A_2\) 同理,然后我们可以两边递归求解

可以发现对于所有的 \(P\) 实际上在做分治合并的过程中都可以求,我们只需要存下来就可以了

根据主定理可以得到复杂度为 \(O(n\log^2 n)\)

多项式取余

\[
A(x)=Q(x)B(x)+R(x)
\]

其中 \(\deg A=n,\deg B=m,\deg R=n-m,m<n\)

定义翻转操作 \(A^r=x^nA(\frac{1}{x})\),其中 \(n=\deg A\)

将 \(x=\frac{1}{x}\) ,并将两边同乘 \(x^n\)
\[
\begin{aligned}
&x^nA(\frac{1}{x})=x^{n-m}Q(\frac{1}{x})x^mB(\frac{1}{x})+x^{n-m+1}x^{m-1}R(\frac{1}{x})\\Rightarrow&A^r(x)\equiv Q^r(x)B^r(x)\pmod {x^{n-m+1}}
\end{aligned}
\]



代码晚点补

原文地址:https://www.cnblogs.com/butterflydew/p/11041754.html

时间: 2024-11-07 12:40:14

多点求值与暴力插值的相关文章

@算法 - [email&#160;protected] 多项式的多点求值与快速插值

目录 @0 - 参考资料@ @1 - 多点求值@ @理论推导@ @参考代码@ @例题与应用@ @2 - 快速插值@ @理论推导@ @(不建议参考的)代码@ @例题与应用@(暂无) @0 - 参考资料@ Cyhlnj 的博客 @1 - 多点求值@ @理论推导@ 假设已知多项式 \(A(x)\),使用 FFT 可以将 \(A(w_n^0)\),\(A(w_n^1)\),...,\(A(w_n^{n-1})\) 的值在 \(O(n\log n)\) 的时间内快速求出. 那么问题来了,假如我现在要求解任

多点求值与快速插值

多点求值 给出 $n$ 次多项式 $A(x)$ ,求出 $m$ 个 $x_i$ 对应的 $A(x_i)$ 考虑分治,设 $L(x)=\prod_{i=1}^{\frac{n}{2}}(x-x_i)$ , $R(x)=\prod_{i=\frac{n}{2}+1}^n(x-x_i)$ 对于 $i \in [1,\frac{n}{2}],F(x_i)=(F \mod L)(x_i)$ , 对于 $i \in (\frac{n}{2},n],F(x_i)=(F \mod R)(x_i)$ 就是对于左半

多项式多点求值和插值

本文以存板子为主= = 对于比较一般的情况,n次多项式在n个点求值和用n个点插值可以做到,并且这也是下界. 多项式多点求值 给一个多项式F和一堆值,求出. 设,. 那么对于,,对于,.递归即可. 多项式多点插值 给一堆值.,要求求出一个n-1次多项式满足. 考虑拉格朗日插值:. 我们先考虑对于每个i,如何求出.设,那么我们就是要求. 取的时候这个式子分子分母都为0,那么我们可以用洛必达法则,这个式子就等于.那么我们可以用多点求值求出每个. 设为,现在我们就是要求,显然可以分治FFT. 具体地,还

多项式多点求值

给定一个\(n\)次多项式\(A(x)\)和\(m\)个值\(a_i\),求出对于\(任意i\in [0,m-1],A(a_i)\)的值 前置知识: 分治FFT 多项式除法 一般优化多项式要么倍增要么分治-- 然而这题看上去不像能倍增的亚子,所以就分治吧 考虑先将要求的点分为两部分 \(x[0]=\{x_0,x_1,--,x_{\frac{m}{2}}\},x[1]=\{x_{\frac{m}{2}+1},x_{\frac{m}{2}+2},--x_{m-1}\}\) 我们记\(p[0]=\pr

hdu 4031 Attack(树状数组区间更新单点求值&amp;amp;暴力)

Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 1890    Accepted Submission(s): 554 Problem Description Today is the 10th Annual of "September 11 attacks", the Al Qaeda is about to

多项式函数插值:多项式形式函数求值的Horner嵌套算法

设代数式序列 $q_1(t), q_2(t), ..., q_{n-1}(t)$ ,由它们生成的多项式形式的表达式(不一定是多项式): $$p(t)=x_1+x_2q_1(t)+...x_nq_1(t)q_2(t)..q_{n-1}(t)=\sum\limits_{i=1}^n(x_i\prod\limits_{j=1}^{i-1}q_j(t))$$ 一般来讲,按照这个形式计算函数在 $t_0$ 点的取值的复杂度为:n-1次 $q_i(t)$ 求值,n-1次浮点数乘法(生成n个不同的乘积),n-

表达式求值(from leetcode 241)

给定一个正确的表达式(不用担心不规范的输入),比如2-1-1, 通过在不同位置添加左右括号,改变求值的优先级顺序,求出所有的这些值: Example 1 Input: "2-1-1". ((2-1)-1) = 0 (2-(1-1)) = 2 Output: [0, 2] Example 2 Input: "2*3-4*5" (2*(3-(4*5))) = -34 ((2*3)-(4*5)) = -14 ((2*(3-4))*5) = -10 (2*((3-4)*5)

四则运算表达式求值 OpenJ_Bailian - 4132

四则运算表达式求值 OpenJ_Bailian - 4132 题意:设计一个计算器,实现+-*/以及()的表达式运算求值. 栈的应用,这学期学数据结构,手写了栈练一下~ 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int maxn=10010; //最大表达式长度 4 5 template <typename T> 6 class Stack; 7 8 template <typename T> 9

栈的应用 -- 无括号表达式的求值

package com.learn.algorithm.expression; import java.util.HashMap; import java.util.Map; import java.util.Stack; /** * 无括号表达式求值 * @author Jiekun.Cui * */ public class Expression { /** * 操作符的优先级定义 */ public static Map<String,Integer> optProirity = nul