zoukankan      html  css  js  c++  java
  • 玄学小记.4 ~ 多项式插值

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

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

    考虑拉格朗日插值法:

    $$F=sum_{1 leq i leq n}y_iprod_{j eq i & 1 leq j leq n}frac{x-x_j}{x_i-x_j}$$

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

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

    若令:

    $$P_i=frac{y_i}{prod_{j eq 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 eq 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))的,算法的瓶颈在多点求值上…… 

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

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

  • 相关阅读:
    java 06 作业代码
    java 06 abstract 抽象类
    java 06 重写(覆盖) final 内部类
    java 06 重写和final
    java 06 继承
    java 05 this static构造函数
    java 05 构造函数-构造代码块
    java 05 heap satck 堆和栈
    java 05 成员变量和成员函数-封装
    BJFU-207-基于顺序存储结构的图书信息表的逆序存储
  • 原文地址:https://www.cnblogs.com/AwD-/p/7905593.html
Copyright © 2011-2022 走看看