一、引入
我们会遇到这样的问题:
给定 nn 个点 ,求一个 n−1n−1 次多项式函数 f(x)f(x) ,
使对于每个 ii ,都有 。
其中 xixi 互不相同。
利用线性代数的知识可以得出有且仅有一个 f(x)f(x) 满足条件。
二、结论
下面直接给出结论:
f(x)=∑i=0n−1yi∏j=0,j≠in−1x−xjxi−xjf(x)=∑i=0n−1yi∏j=0,j≠in−1x−xjxi−xj
复杂度 O(n2)O(n2) 。
三、证明
对于任意 0≤k<n0≤k<n ,将 xkxk 代入公式:
对于 i=ki=k ,有 xi=xkxi=xk :
yk∏j=0,j≠kn−1xk−xjxk−xj=ykyk∏j=0,j≠kn−1xk−xjxk−xj=yk
而对于 i≠ki≠k ,在满足 0≤j<n,j≠i0≤j<n,j≠i 的 jj 中一定有一个 。
于是就必定有一个 xk−xkxk−xk 的项。
所以对于 i≠ki≠k :
yi∏j=0,j≠in−1xk−xjxi−xj=0yi∏j=0,j≠in−1xk−xjxi−xj=0
得证。
四、应用
如果知道了两个变量之间的联系是多项式并知道了多项式的次数 n−1n−1 ,那么可以取 nn 个值(要取合适的值)代入多项式并求解。
如:
给定 ,求:
∑i=1nik∑i=1nik
n≤1018,k≤106n≤1018,k≤106 。
我们知道:
∑i=1ni0=n∑i=1ni0=n
∑i=1ni1=n(n+1)2∑i=1ni1=n(n+1)2
∑i=1ni2=n(n+1)(2n+1)6∑i=1ni2=n(n+1)(2n+1)6
∑i=1ni3=(n(n+1)2)2∑i=1ni3=(n(n+1)2)2
得出结论: f(n,k)=∑ni=1ikf(n,k)=∑i=1nik 是一个 k+1k+1 次多项式。
可以取 k+2k+2 个值 1,2,...,k+21,2,...,k+2 并计算出 f(1,k),f(2,k),...,f(k+2,k)f(1,k),f(2,k),...,f(k+2,k) 代入:
f(n,k)=∑i=1k+2f(i,k)∏j=1,j≠ik+2n−ji−jf(n,k)=∑i=1k+2f(i,k)∏j=1,j≠ik+2n−ji−j
可以 O(k)O(k) 预处理出 g(i)=∏k+2j=1,j≠i{n−j}g(i)=∏j=1,j≠ik+2{n−j} 。对 j<ij<i 和 j>ij>i 分别处理即可。
而对 ∏k+2j=1,j≠i{i−j}∏j=1,j≠ik+2{i−j} ,也可以分 j<ij<i 和 j>ij>i 分别处理:
∏j=1,j≠ik+2{i−j}=(−1)k+2−i(i−1)!(k+2−i)!∏j=1,j≠ik+2{i−j}=(−1)k+2−i(i−1)!(k+2−i)!
预处理阶乘后,复杂度就是 O(k)O(k) 的。然而由于求 f(i,k)f(i,k) 时要求幂,复杂度 O(klogk)O(klogk) 。
本文介绍了拉格朗日插值法,通过nn个互不相同的点(xi,yi),求解n-1次多项式函数f(x),确保每个点满足f(xi)=yi。文章详细阐述了该方法的结论、证明过程及其在实际问题中的应用。"
108260290,10012180,XGBoost多分类实战与理论解析,"['机器学习', '算法', 'Python', 'Java', '人工智能']

1万+

被折叠的 条评论
为什么被折叠?



