問題:給你 \(n+1\) 個點值,求這 \(n+1\) 個點確定的 \(n\) 次多項式 \(f(x)\)(求出給定點 \(x_0\) 的值 \(f(x_0)\) 即可)。
我們可以直接高斯消元,\(\mathcal(n^3)\)
一般的拉格朗日插值法
簡單來說,拉格朗日插值法可以找出乙個恰好經過直角座標系內 \(n\) 個給定點的函式。
我們設所求的多項式為 \(f(x)\) ,點的座標為 \((x_i,y_i)\) ,那麼我們有:
\[f(x_0)=\sum_^n y_i \prod_ \frac
\]我們發現,代入任意乙個 \(x_k,k\in[1,n]\) ,當 \(k\neq i\) 時,後面的 \(\prod_ \frac\) 為 \(0\) ;而 \(k==i\) 時,後面的 \(\prod_ \frac\) 為 \(1\) 。
時間複雜度 \(\mathcal(n^2)\)
在 \(x\) 取值連續時的拉格朗日插值法
很多時候我們做題都是先發現某個函式是多少次的多項式,然後自己取一些值代入插值求 \(f(x_0)\)。
這時我們爆算的點的橫座標可以從 \(1\) 開始連續取,這樣我們把上面的式子中的 \(x_i\) 換成 \(i\) 有:
\[f(x_0)=\sum_^y_i \prod_ \frac
\]我們發現:
對於分子我們可以與處理字首積和字尾積:
\(pl[i]=\prod_^i (x_0-j)\)
\(pr[i]=\prod_^n(x_0-j)\)
這樣可以 \(\mathcal(1)\) 求分子;
對於分母,我們可以預處理階乘,分母實際上就是:
\((-1)^(i-1)!\cdot (n-i)!\)
這樣我們可以乙個 \(\mathcal(\log n)\) 求出分母。(如果你預處理逆元則可以 \(\mathcal(1)\) )
重心拉格朗日插值法
我們發現,一般的拉格朗日插值法每多加入乙個點時就要整個重新計算,考慮如何利用已經計算的資訊。
我們對於
\(f(x_0)=\sum_^n y_i \prod_ \frac\)
把分子提取出來,設為 \(g=\prod_^n x_0-x_i\) ,則此時:
\(f(x_0)=g \times \sum_^n \prod_ \frac\)
設 \(t_i=\frac x_i-x_j}\) 則:
\(f(x_0)=g\times \sum_^n \frac\)
因此每次多加入乙個點只需要重新 \(\mathcal(n)\)算它的 \(t_i\) 就好了。
拉格朗日插值法的應用
暴力算式子:確定題目中的某個函式的次數,就可以暴力代入,然後差值去算出這個式子。
或是說題目給定的式子不確定,你需要在程式中算出來(有回校內考試出現過
拉格朗日插值法的板子(?
luogu p4781 【模板】拉格朗日插值
#include#include#define ll long long
#define r register int
using namespace std;
namespace luitaryi const int n=2010,m=998244353;
int n,k;
int x[n],y[n];
inline ll qpow(ll a,ll b)
inline int lagrange(const int& n,const int& k,int* x,int* y) return ret;
}inline void main()
} signed main()
cf622f the sum of the k-th powers
#include#define r register int
using namespace std;
namespace luitaryi const int n=1000010,m=1000000007;
int n,k,ans;
int fac[n],pl[n],pr[n];
inline int qpow(int a,int b)
inline void main() printf("%d\n",(ans+m)%m);
}} signed main()
拉格朗日插值法
拉格朗日插值法 拉格朗日插值法可以幫助我們解決以下的問題 已知x取值0,1,1,2時,f取值2,2,0,6 求x 3時f的值。示例1 intxs intys f 3 intval lagrangepolynomial 3,xs,ys staticint lagrangepolynomial intx...
拉格朗日插值法
模板題 給出n nn個點 xi yi x i,y i xi y i 讓你確定這個n 1 n 1n 1次方程並代入求值 這個有三種求法 第一種是差分法,只適用於xi ix i i xi i的情況,就是不斷做差分直到序列變成乙個定值就可以求出所有項的係數,複雜度o n 2 o n 2 o n2 第二種是...
拉格朗日插值法
function p lagrange x,y p lagrange x,y 其中x和y是向量,p是返回的多項式向量 m獲取x的個數 m length x for k 1 1 m 表示乙個插值函式的起始值 v 1 for i 1 1 m if k i 注意 以後凡是在遇到乙個在數學上是 x 1 等包...