zoukankan      html  css  js  c++  java
  • 拉格朗日插值

    吓得我都被拉格朗日了

    小学知识可知,(n)个点((x_i,y_i))可以唯一地确定一个多项式

    现在,给定(n)个点,请你确定这个多项式,并将(k)代入求值

    求出的值对(998244353)取模

    我们首先可以想到高斯消元

    发现高斯消元是(O(n^3))的,我凉了

    看一眼标题,查一波公式发现了拉格朗日它老人家留下的好东西:

    拉格朗日插值法

    假设多项式为(f(k)),有点值((x_i,y_i)),那么多项式在(k)点的取值为

    [f(k)=sumlimits_{i=0}^{n}y_iprodlimits_{i e j}frac{k-x_j}{x_i-x_j} ]

    这个式子是怎么推出来的呢?

    这个您得问拉格朗日去 但是我们可以证明一下

    (1.)分母不为(0):
    当分母为(0)时当且仅当存在(x_i=x_j),那么如果(y_i=y_j)就是同一点,可以去重,如果(y_i e y_j),不满足函数性质
    (2.)满足所有给定点值:
    对于(k=x_i),当(sum)中的(x_i e k)时,其他项均存在(k-x_i=0),对于(x_i=k)时,满足(prod)中所有项均为(1),则最终答案为(y_i)

    所以说它好像是对的,复杂度(O(n^2))

    前缀积后缀积优化

    (x_i)取值连续时,我们可以用前缀积后缀积优化到(O(n))

    在连续时,我们把(x_i)替换为(i)得到

    [f(k)=sumlimits_{i=0}^{n}y_iprodlimits_{i e j}frac{k-j}{i-j} ]

    如果我们有(pre_i=prodlimits_{j=0}^{i}k-j)以及(suf_i=prodlimits_{j=i}^{n}k-j,fac_i=prodlimits_{j=1}^{i}j)

    那么原式可以表示为

    [f(k)=sumlimits_{i=0}^{n}y_ifrac{pre_{i-1}*suf_{i+1}}{fac_{i}*fac_{n-i}}*(-1)^{n-i} ]

    重心拉格朗日插值

    回到最初的起点:

    [f(k)=sumlimits_{i=0}^{n}y_iprodlimits_{i e j}frac{k-x_j}{x_i-x_j} ]

    这个式子是不通用的,每改变一个点值就要(O(n^2))地重新计算

    我们做一个变形,设(g=prodlimits_{i=0}^{n}k-x_i)

    [f(k)=gsumlimits_{i=0}^{n}frac{y_i}{k-x_i}prodlimits_{i e j}frac{1}{x_i-x_j} ]

    (t_i=frac{y_i}{prodlimits_{i e j}x_i-x_j})

    [f(k)=gsumlimits_{i=0}^{n}frac{t_i}{k-x_i} ]

    每次修改或插入直接修改(t_i)就好了,注意重心插值不能处理(k=x_i)

    例题

    洛谷P4593 [TJOI2018]教科书般的亵渎

  • 相关阅读:
    OFDM系统中频域同步技术及FPGA实现
    SystemVerilog的挑战和机遇
    基础知识要牢固..复习复习,再复习
    样式在.net下测试不成功.附解决办法
    学习.net2.0的网站
    08年又快结束了..抱怨下!~
    今天去面试.net开发,感想
    在b/s开发中经常用到的javaScript技术
    淘宝"新版"首页
    Ajax技术简单入门
  • 原文地址:https://www.cnblogs.com/knife-rose/p/12029276.html
Copyright © 2011-2022 走看看