拉格朗日插值

拉格朗日插值

n n n个点 ( x i , y i ) (x_i,y_i) (xi,yi),要唯一确定一个 n − 1 n-1 n1次多项式 f ( x ) f(x) f(x),使得 ∀ i , f ( x i ) = y i \forall i,f(x_i)=y_i i,f(xi)=yi

有简单的结论:
f ( x ) = ∑ i = 1 n y i ∏ j ≠ i x − x j x i − x j f(x)=\sum_{i=1}^{n}y_i\prod_{j \not = i}\frac{x-x_j}{x_i-x_j} f(x)=i=1nyij=ixixjxxj

任意条件 O ( n 2 ) O(n^2) O(n2)插值

从这个式子可以简单的得到一个 O ( n 2 ) O(n^2) O(n2)插值的做法。

h ( x ) = ∏ i = 1 n ( x − x i ) h(x)=\prod_{i=1}^{n}(x-x_i) h(x)=i=1n(xxi) f ( x ) f(x) f(x)可以简写为 ∑ i = 1 n y i ∏ j ≠ i ( x i − x j ) h ( x ) x − x i \sum_{i=1}^{n}\frac{y_i}{\prod_{j \not = i}(x_i-x_j)}\frac{h(x)}{x-x_i} i=1nj=i(xixj)yixxih(x),其中前面的分式可以暴力 O ( n 2 ) O(n^2) O(n2)的算, h ( x ) h(x) h(x)也可以暴力 O ( n 2 ) O(n^2) O(n2)卷,后面的 h ( x ) x − x i \frac{h(x)}{x-x_i} xxih(x)每次可以 O ( n ) O(n) O(n)递推算出来,故总时间复杂度 O ( n 2 ) O(n^2) O(n2)

一定条件下 O ( n log ⁡ 2 n ) O(n\log^2 n) O(nlog2n)插值

观察一下上面 f ( x ) f(x) f(x)的简写形式,发现可以分治NTT做到 O ( n log ⁡ 2 n ) O(n \log^2 n) O(nlog2n),但是难点在怎么快速的计算 ∏ j ≠ i ( x i − x j ) \prod_{j \not = i}(x_i-x_j) j=i(xixj)

g i ( x ) = h ( x ) x − x i g_i(x)=\frac{h(x)}{x-x_i} gi(x)=xxih(x),发现就是要求 g i ( x i ) g_i(x_i) gi(xi),把 x i x_i xi带入并用洛必达法则可以得到:
lim ⁡ x → x i h ( x ) x − x i = lim ⁡ x → x i h ′ ( x ) = h ′ ( x i ) \lim_{x \rightarrow x_i} \frac{h(x)}{x-x_i}=\lim_{x\rightarrow x_i}h'(x)=h'(x_i) xxilimxxih(x)=xxilimh(x)=h(xi)
所以就是要求 h ′ ( x ) h'(x) h(x) n n n个点值,直接 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n)多点求值即可。

但是这个做法只有在模数比较好的情况下才能实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值