題目描述
由小學知識得: \(n + 1\) 個 \(x\) 坐標不同的點確定唯一的最高次為 \(n\) 次的多項式 \(y = f(n)\) 。現在給出 \(n + 1\) 個點,求出這些點構成的多項式在某一位置的取值
拉格朗日插值法
假設給出的曲線是個二次多項式
現在有三個已經確定的點 \((x_1, y_1)\) ,\((x_2, y_2)\) , \((x_3, y_3)\)
代入柿子
很顯然可以用高斯消元求出 \(a,b,c\) , 時間復雜度 \(O(n^3)\)
但拉格朗日插值法只需要 \(n^2\)
神奇的構造:
我們需要構造三條曲線 \(f_1,f_2,f_3\)
- 對於第一條曲線 \(f_1(x)\)
令 \(f_1(x_1) = 1, f_1(x_2) = f_1(x_3) = 0\)
- 對於第二條曲線 \(f_2 (x)\)
令 \(f_2(x_2) = 1, f_2(x_1) = f_2(x_3) = 0\)
- 對於第三條曲線 \(f_3(x)\)
令 \(f_3(x_3) = 1, f_3(x_1) = f_3(x_2) = 0\)
然后
-
\(y_1f_1(x)\) 就能保證在 \(x_1\) 處為 \(y_1\) ,\(x_2,x_3\) 處為取值為 0
-
\(y_2f_2(x)\) 就能保證在 \(x_2\) 處為 \(y_2\) ,\(x_1,x_3\) 處為取值為 0
-
\(y_3f_3(x)\) 就能保證在 \(x_3\) 處為 \(y_3\) ,\(x_1,x_2\) 處為取值為 0
再然后
神奇 發現這三條曲線就求出了想要的那條曲線
推導
對於上面的三條曲線顯然滿足性質
然后構造出這么個柿子
進一步推廣
然后就有了
x 取值連續時
當題目要用到的 x 取值是連續的,上面的柿子可以優化到 \(O(n)\)
先列出柿子
考慮 \(O(1)\) 求出 \(\prod_{j \neq i}\frac{x_k - x_j}{x_i - x_j}\)
維護 \(x_k\) 的前綴積和后綴積
對於分母,就是個階乘形式,柿子就成了
坑:當 \(n - i\) 為奇數的時候分母為負值
CF622F The Sum of the k-th Powers
重心拉格朗日插值法
有毒瘤題目會隨時增加或者減少差值點,這個時候曲線就會改變,上面的柿子就需要重新計算了,那么上面的復雜度就會退化成 \(n^3\) 於是就有了重心拉格朗日插值 (好像牛頓插值法也可以辦到 = =)
還是前面的柿子
令 $g = \prod_{i = 1}^{n}(x - x_i),t(i) = \prod_{i\neq j}(x_i - x_j) $
然后柿子就成了
對於每加入或減少一個點,可以只 \(O(n)\) 更新 \(t(i)\)
對於求值,可以 \(O(n)\) 求出 g,然后套公式就好了
預處理出逆元
時間復雜度 \(O(n)\)
參考資料
