玄学小记.4 ~ 多项式插值

给定平面上的\(n\)个点,求一个\(n - 1\)阶多项式经过这些点……

我以前应该是只会\(O(n^3)\)的高斯消元的……就是直接把方程列出来直接解的那种…… 

 

考虑拉格朗日插值法:

$$F=\sum_{1 \leq i \leq n}y_i\prod_{j\neq i \& 1 \leq j \leq n}\frac{x-x_j}{x_i-x_j}$$

显然如果直接计算右边的式子可以得到一个\(O(n^3)\)的做法,这不够优越……

注意到\(\prod_{j\neq i \& 1 \leq j \leq n}(x-x_j)\)的形式非常美妙,考虑分治:

若令:

$$P_i=\frac{y_i}{\prod_{j\neq i \& 1 \leq j \leq n}(x_i-x_j)} $$

$$G(l, r) = \prod_{l \leq j \leq r}(x-x_j)$$

$$H(l, r)=\sum_{l \leq i \leq r}P_i \prod_{j\neq i \& l \leq j \leq r}(x-x_j)$$

那么就有\(F=H(1, n)\)。

显然有转移$$G(l, r) = G(l, m) G(m + 1, r)$$ $$H(l, r) = H(l, m)G(m + 1, r) +G(l, m) H(m + 1, r)$$,其中\(m = \frac{l + r}{2}\)。

直接算所有\(P_i\)的复杂度为\(O(n ^ 2)\)。

暴力乘法的话分治部分的复杂度为\(T(n) = 2T(\frac{n}{2}) + O(n ^ 2)\),可得\(T(n) = O(n ^ 2)\)。

因此整个东西的复杂度是\(O(n ^ 2)\)的。

 

注意到\(P_i\)也是可以用一个类似的分治快速计算的,使用多点求值可以在\(O(n log^3n)\)的时间内求出。

后面的分治部分可以使用FFT优化以在\(O(n log^2n)\)的时间内得到。

因此整个东西的复杂度是\(O(n log^3n)\)的,算法的瓶颈在多点求值上…… 

 

后面那个东西似乎没有什么卵用,虽然没有实现过但是总觉得常数非常大……

前面那个东西可以用来算幂级数的通项~

 

posted @ 2017-11-27 19:00 AwD! 阅读(...) 评论(...) 编辑 收藏