• 玄学小记.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))的,算法的瓶颈在多点求值上…… 

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

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

  • 相关阅读:
    安卓客户端获取手机号码
    安卓自定义控件之设计自己的提示dialog
    一步步打造自己的分页控件4
    C#winform小游戏之贪吃蛇重温C#
    android观察者模式
    Android开发之Java设计模式
    Android 用Animationlist实现逐帧动画
    图片压缩
    Android使用缓存优化ListView
    Android命令行启动程序正确使用技巧解析
  • 原文地址:https://www.cnblogs.com/AwD-/p/7905593.html
Copyright © 2020-2023  润新知