问题描述
-
lagrange插值解决一种问题:给定 n + 1 n+1 n+1个点和值(可以看作 ( x , y ) (x,y) (x,y)),用以描述一个 n n n次多项式,需要求出其他 x x x对应的多项式的值。
-
设前 n + 1 n+1 n+1个点为 ( x i , y i ) (x_{i},y_{i}) (xi,yi),对于当前 的点 k k k,有
f ( k ) = ∑ i = 0 n y i ∏ j ≠ i ( k − x [ j ] ) ( x [ i ] − x [ j ] ) f(k)=\sum_{i=0}^n \ y_{i} \prod_{j \neq i} \ {(k-x[j])\over (x[i]-x[j])} f(k)=i=0∑n yij=i∏ (x[i]−x[j])(k−x[j]) -
证明:首先n+1个点可以确定一个n次多项式。
对于给出的点 ( x i , y i ) (x_{i},y_{i}) (xi,yi),带入 x i x_{i} xi可得结果为 y i y_{i} yi,所以这 n + 1 n+1 n+1个点在此 n n n次多项式上,即可确定有且仅有这一多项式。 -
应用:多点查值:
已有 n + 1 n+1 n+1个点,要对于询问的 m m m个点 k k k查出多项式的值,要求做到 O ( n m + n 2 ) O(nm+n^2) O(nm+n2)
思路:我们把式子变形,分成与 给定点相关的项, O ( n 2 ) O(n^2) O(n2)预处理,再每次 O ( n ) O(n) O(n)计算与 k k k相关的项即可。 -
实现:
f ( k ) = ∑ i = 0 n y i ∏ j ≠ i ( k − x [ j ] ) ( x [ i ] − x [ j ] ) f(k)=\sum_{i=0}^n \ y_{i} \prod_{j \neq i} \ {(k-x[j])\over (x[i]-x[j])} f(k)=i=0∑n yij=i∏ (x[i]−x[j])(k−x[j])
令 t [ i ] = y i ∏ j = 0 n ( x [ i ] − x [ j ] ) t[i]={y_{i}\over {\prod_{j=0}^n(x[i]-x[j])}} t[i]=∏j=0n(x[i]−x[j])yi
有
f
(
k
)
=
∑
i
=
0
n
t
[
i
]
∏
i
≠
j
(
k
−
x
[
j
]
)
f(k)=\sum_{i=0}^n \ {t[i]\prod_{i\neq j} (k-x[j])}
f(k)=i=0∑n t[i]i=j∏(k−x[j])
令
g
=
∏
i
=
0
n
(
k
−
x
[
i
]
)
g=\prod_{i=0}^n(k-x[i])
g=i=0∏n(k−x[i])
有
f
(
k
)
=
g
∑
i
=
0
n
t
[
i
]
(
k
−
x
[
i
]
)
f(k)=g \sum_{i=0}^n \ {t[i]\over(k-x[i])}
f(k)=gi=0∑n (k−x[i])t[i]
预处理出 t [ i ] t[i] t[i], O ( n ) O(n) O(n)查出 f ( k ) f(k) f(k)。
- 模板:洛谷P4781
注意 ( x [ i ] − x [ j ] ) (x[i]-x[j]) (x[i]−x[j])不要改变其正负性