插值
即 离散的数据点 \(\rightarrow\) 连续的函数
一般给定 \(n+1\) 个点 \((x_i,y_i),1\le i\le n+1\),求 \(n\) 阶多项式 \(f(x)\) 满足 \(f(x_i)=y_i,\forall i=0,1,...,n\)
常见方法有 Lagrange 插值法 和 Newton 插值法,两者只是实现不同,结果是相同的
Lagrange 插值法
公式:
可 \(O(n^2)\) 求出
可以优化到 \(O(n\log^2n)\)
多项式的多点求值
给出一个多项式 \(f(x)\) 和 \(n\) 个点 \(x_1,x_2,...,x_n\),求
\(f(x_1),f(x_2),...,f(x_n)\)
考虑分治
将点集分为 \(X_0=\{x_1,x_2,...,x_{\lfloor\frac n2\rfloor}\}\\X_1=\{x_{\lfloor\frac n2\rfloor+1},...,x_{n-1},x_n\}\)
构造 \(g_0(x)=\prod_{x_i\in X_0}(x-x_i)\)
则有 \(\forall x\in X_0:g_0(x)=0\)
将 \(f(x)\) 表示为 \(g_0(x)Q(x)+f_0(x)\),即 \(f_0(x)= f(x)\bmod{g_0(x)}\)
则有 \(\forall x\in X_0:f(x)=g_0(x)Q(x)+f_0(x)=f_0(x)\),\(X_{1}\) 同理。
问题的规模减半,可以使用分治 + 多项式取模解决
时间复杂度 \(O(n\log^2n)\)
多项式的快速插值
令多项式 \(M(x)=\prod_{i=1}^n(x-x_i)\),其系数可以分治 \(O(n\log^2n)\) 求出
\(O(n)\) 求出其导数 \(M'(x)\) 的系数
求出 \(M'(x_i),1\le i\le n+1\),多点求值可以做到 \(O(n\log^2n)\)
则
令 \(v_i=\frac{y_i}{M'(x_i)}\),可 \(O(n)\) 求出
然后分治计算 f 的系数
当 \(n=1\) (即最后分治到的子区间长度为 \(1\))时,\(f(x)=v_1, M(x)=x-x_1\)
否则令
其中 \(f_0,M_0\) 为左一半的结果,\(f_1,M_1\) 为右一半
则可推出 \(f(x)=f_0(x)M_1(x)+f_1(x)M_0(x),M(x)=M_0(x)M_1(x)\)
可 \(O(nlog^2n)\) 求出
总时间复杂度 \(O(nlog^2n)\)
横坐标是连续整数的 Lagrange 插值
假如已知 \(f(1),f(2),...,f(n+1)\),则可 \(O(n)\) 求出 \(f\)
公式:
预处理 \((x-i)\) 前后缀积、阶乘逆,然后代入即可 \(O(n)\) 求出

浙公网安备 33010602011771号