首页 > 其他 > 详细

拉格朗日插值法

时间:2019-03-23 15:56:33      阅读:132      评论:0      收藏:0      [点我收藏+]

拉格朗日插值法

问题引入

有一个\(n+1\)项的多项式\(f(x)\),给出\(n+1\)个点\((x_i,y_i)\),求这个多项式。


这里我们直接给出问题的答案:
\[ f(x)=\sum_{i=0}^ny_i\prod_{j\ne i}\frac{x-x_j}{x_i-x_j} \]
考虑我们带入\(x_k\),可得:
\[ f(x)=\sum_{i=0}^ny_i\prod_{j\ne i}\frac{x_k-x_j}{x_i-x_j} \]
注意到\(i\ne k\)的项分子一定有一项为\(0\),所以:
\[ f(x)=y_k\prod_{j\ne k}\frac{x_k-x_j}{x_k-x_j}=y_k \]
发现这个多项式是满足条件的,证毕。

至此,我们可以在\(O(n^2)\)的时间内求出\(f(x)\)


\(x_ i\)连续时的情况

同样我们把式子抄过来:
\[ f(x)=\sum_{i=0}^ny_i\prod_{j\ne i}\frac{x-x_j}{x_i-x_j} \]
可以发现分子可以用前缀积来表示,设:
\[ pre_i=\prod_{j=0}^i(x-x_j),suf_i=\prod_{j=i}^n(x-x_j) \]
由于\(x_i\)连续,分母可以写成阶乘的形式,式子变成:
\[ f(x)=\sum_{i=0}^ny_i\frac{pre_{i-1}\cdot suf_{i+1}}{(-1)^{n-i}i!(n-i)!} \]
至此,我们可以在\(O(k)\)的时间内算出任意一项。


那么我们可以很方便\(O(k)\)的算出\(\sum_{i=1}^ni^k\),可以比较容易的证明,这是一个\(k+1\)次的多项式,所以直接插值就好了。

其中\(i\in [0,k+1]\)的取值我们可以线筛然后前缀和,对于每个素数我们暴力的快速幂,由于素数密度,这部分的复杂度是\(O(\dfrac{k}{\ln k} \cdot \log k)=O(k)\)

习题:[BZOJ5339] [TJOI2018]教科书般的亵渎

\[ \underline{\widehat{\dbinom{\odot_\vee\odot}{{\raise-8pt"}\wr{\raise-8pt"}}}} \]

拉格朗日插值法

原文:https://www.cnblogs.com/hbyer/p/10583970.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!