多项式点值表示的存在性
对 \(n\) 阶多项式 \(F(x) = \sum_{i = 0}^{n} a_i x^{i}\) ,存在一组 \(n\) 阶互异点值 \([p_i, p_1, \cdots, p_n]\) 满足 \(F(x.p_i) = y.p_i, \forall i,j, p_i \neq p_j\) 。其中横坐标是自变量,纵坐标是多项式的结果。
存在性显然。
任意一组 \(n\) 阶点值表示单射一个 \(n\) 阶多项式
下面证明对于任意一组 \([p_0, p_1, \cdots, p_n], (p_i = (x_i, y_i)), \forall i,j, p_i \neq p_j\) 对 \(f(x)\) 单射。
将
\[\begin{aligned}
&\left \{
\begin{aligned}
1 \times a_0 + x_0 \times a_1 + x_0^{2} \times a_2 + \cdots + x_0^{n} \times a_n = y_0 \\
1 \times a_0 + x_1 \times a_1 + x_1^{2} \times a_2 + \cdots + x_1^{n} \times a_n = y_1 \\
1 \times a_0 + x_2 \times a_1 + x_2^{2} \times a_2 + \cdots + x_2^{n} \times a_n = y_2 \\
\qquad \vdots \qquad \vdots \qquad \vdots \qquad \ddots \qquad \vdots \\
1 \times a_0 + x_n \times a_1 + x_n^{2} \times a_2 + \cdots + x_n^{n} \times a_n = y_n \\
\end{aligned}
\right .
\end{aligned}
\]
看成
\[\begin{aligned}
\left [
\begin{matrix}
1 & x_{0} & x_{0}^{2} & \cdots & x_{0}^{n} \\
1 & x_{1} & x_{1}^{2} & \cdots & x_{1}^{n} \\
1 & x_{2}^{1} & x_{2}^{2} & \cdots & x_{2}^{n} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
1 & x_{n}^{1} & x_{n}^{2} & \cdots & x_{n}^{n} \\
\end{matrix}
\right ]
\cdot
\left [
\begin{matrix}
a_0 \\
a_1 \\
a_2 \\
\vdots \\
a_n \\
\end{matrix}
\right ]
=
\left [
\begin{matrix}
1 \\
1 \\
1 \\
\vdots \\
1 \\
\end{matrix}
\right ]
\cdot
a_0
+
\left [
\begin{matrix}
x_0^{1} \\
x_1^{1} \\
x_2^{1} \\
\vdots \\
x_n^{1} \\
\end{matrix}
\right ]
\cdot
a_1
+
\left [
\begin{matrix}
x_0^{2} \\
x_1^{2} \\
x_2^{2} \\
\vdots \\
x_n^{2} \\
\end{matrix}
\right ]
\cdot
a_2
+
\cdots
+
\left [
\begin{matrix}
x_0^{n} \\
x_1^{n} \\
x_2^{n} \\
\vdots \\
x_n^{n} \\
\end{matrix}
\right ]
\cdot
a_n
&=
\left [
\begin{matrix}
\sum_{i = 0}^{n} a_i x_0^{i} \\
\sum_{i = 0}^{n} a_i x_1^{i} \\
\sum_{i = 0}^{n} a_i x_2^{i} \\
\vdots \\
\sum_{i = 0}^{n} a_i x_n^{i} \\
\end{matrix}
\right ]
=
\left [
\begin{matrix}
F(x_0) \\
F(x_1) \\
F(x_2) \\
\vdots \\
F(x_n) \\
\end{matrix}
\right ]
\end{aligned}
\]
有
\[\begin{aligned}
V^{T}(x_0, x_1, x_2, \cdots, x_n)
&= \left |
\begin{matrix}
1 & x_{0} & x_{0}^{2} & \cdots & x_{0}^{n} \\
1 & x_{1} & x_{1}^{2} & \cdots & x_{1}^{n} \\
1 & x_{2}^{1} & x_{2}^{2} & \cdots & x_{2}^{n} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
1 & x_{n}^{1} & x_{n}^{2} & \cdots & x_{n}^{n} \\
\end{matrix}
\right |
\\
det(V^{T}) = det(V) &= \prod_{1 \leq i < j \leq n} (x_j - x_i)
\end{aligned}
\]
\(Vandermonde\) 行列式结果的证明实际上只是展开爆算一下,能接受就行。
显然当 \(\forall i, j, x_i \neq x_j\) 时,行列式不为 \(0\) ,矩阵满秩,解存在且唯一,一组点值单射一个多项式。或者说 \(n + 1\) 组线性无关的向量 \([x_i^{0}, x_i^{1}, x_i^{2}, \cdots, x_i^{n - 1}]\) 能且仅能表示一个 \(n\) 阶多项式。
点值表示的卷积
由 \(\forall x, H(x) = F(x) \times G(x)\) ,两个多项式可以选取同一套横坐标的点值表示如 \([(0, F(0)), (1, F(1)), \cdots, (n, F(n))]\) 和 \([(0, G(0)), (1, G(1)), \cdots, (n, G(n))]\) ,则 \(H\) 也存在一组点值表示 \([(0, F(0) \times G(0)), (1, F(1) \times G(1)), \cdots, (n, F(n) \times G(n))]\) 。
容易发现,多项式的代数卷积为 \(O(n^{2})\) ,点值卷积为 \(O(n)\) 。
假设我们能先对齐多项式,快速计算各个多项式固定的 \(n\) 个横坐标的的点值表示。那么就可以将多项式转成点值表示,做完卷积后再转回多项式。
注意到多项式朴素算一组点值的时间复杂度也是 \(O(n^{2})\) 。而快速傅里叶变换展示了如何通过 \(O(n \log n)\) 的时间复杂度让多项式实现代数变换成一组点值,且能以同样的时间复杂度逆变换为代数表示。
快速傅里叶变换变换并不能真正实现多项式的点值表示到代数表示的转化,只是将多项式的代数表示变换为一组特殊的点值表示,再实现逆变换。
多项式插值
有时候我们得到了某个多项式的一组点值表示,考虑如何获得任意一个自变量对应的多项式结果。一个直观的想法是通过点值表示复原代数表示,然后直接计算。但这很难被做到。
多项式插值并不是真正的多项式代数表示,而是借助一组该多项式的点值表示,完成代数意义下的多项式计算。
最常用的多项式插值为 \(Lagrange\) 插值。
\[F(x) = \sum_{i = 0}^{n} F(x_i) \prod_{j \neq i} \frac{x - x_j}{x_i - x_j}
\]
基于多项式点值表示的性质,多项式插值的存在性和唯一性显然。将已有的点值表示带入 \(Lagrange\) 插值的,展开后正确性显然。无规律的朴素 \(Lagrange\) 插值时间复杂度为 \(O(n^{2})\) 显然。
当已有的点值表示的坐标连续时,\(Lagrange\) 插值可以做到线性时间复杂度。比如对于一组点值表示 \([(0, F(0)), (1, F(1)), (2, F(2)), \cdots, (n, F(n))]\) 。
\[\begin{aligned}
F(x) &= \sum_{i = 0}^{n} F(i) \prod_{j \neq i} \frac{x - j}{i - j} \\
&= \sum_{i = 0}^{n} F(i) \prod_{j = 0}^{i - 1} \frac{x - j}{i - j} \prod_{j = i + 1}^{n} \frac{x - j}{i - j} \\
&= \sum_{i = 0}^{n} F(i) \frac{(\prod_{j = 0}^{n} x - j) / (x - i)}{\prod_{j = 0}^{i - 1} i - j \prod_{j = i + 1}^{n} i - j } \\
&= \sum_{i = 0}^{n} F(i) \frac{(\prod_{j = 0}^{n} x - j) / (x - i)}{\prod_{k = 1}^{i} k \prod_{k = 1}^{n - i} -k } \\
&= \sum_{i = 0}^{n} F(i) \frac{(\prod_{j = 0}^{n} x - j) / (x - i)}{i! (n - i)! (-1)^{n - i} } \quad s.t. \quad x > n \\
\end{aligned}
\]