拉格朗日插值法
拉格朗日插值法
引入
拉格朗日插值法是一种解决多项式插值的方法。
多项式插值:
已知 \(n + 1\) 个点 \((x_i, y_i)\), 求一个多项式函数 \(f(x)\) 使得其图像经过这 \(n + 1\) 个点。
其中 \(f(x)\) 被称为插值多项式。
可以证明 \(n + 1\) 个点可以唯一确定一个最高 \(n\) 次的插值多项式。
结论
可以发现对于一个点 \((x_a, y_a)\),当 \(i \neq a\) 时,\(\prod\) 部分会有一个 \(\dfrac{x_a - x_a}{x_i - x_a}\),此时该式子值为 \(0\)。而当 \(i = a\) 时,\(\prod\) 部分的值为 \(1\)。故 \(f(x_a) = y_a\)。
求某一点的值的复杂度为 \(O(n^2)\)。
取值连续时的优化
当 \(x\) 的取值连续,即 \(x_i = i\) 时,可以将复杂度优化到 \(O(n)\)。
令 \(pre_i = \prod\limits_{j = 0}^i (k - j), suf_i = \prod\limits_{j = i}^n (k - j)\)。
则
重心拉格朗日插值法
一种可以 \(O(n)\) 插入一个点,\(O(n)\) 查询的拉格朗日插值法。
依然考虑这个式子:
设 \(g(k) = \prod\limits_{i = 0}^n k - x_i, t_i = \dfrac{y_i}{\prod\limits_{j \neq i} x_i - x_j}\)。
则
于是每次插入只需要更新之前的所有 \(t_i\) 并计算当前点的 \(t_i\) 即可,时间复杂度为 \(O(n)\)。
由于 \(g(k)\) 和 \(\sum\limits_{i = 0}^k \dfrac{t_i}{k - x_i}\) 都可以 \(O(n)\) 求得,故询问复杂度也是 \(O(n)\)。