写在前面:
学了拉格朗日插值法之后发现大家都说可以在O(n^2)时间内得到多项式系数,但是没有找到代码,网上找了很多资料又因为我太弱了没能看懂,最后在emofunx学长的帮助下终于搞明白了。
由于太弱没能看懂的文章
引入
我们都知道n个点可以确定一个n-1次的多项式F(x),然后用拉格朗日插值法可以求出这个多项式。
拉格朗日插值法
公式为:
由这个公式,对于一个数k,我们很容易在O(n^2)时间求得F(k)的数值,如果xi是连续的,我们甚至可以利用预处理在O(n)时间内得到F(k)的数值。
但是如果xi不连续,又有多组查询,就需要得到这个多项式的系数以保证求一个函数值的时间为O(n)。
拉格朗日插值法求系数
首先观察式子,发现对于每个i, 上面部分是(x-x1) * (x-x2)… * (x-xn)/(x-xi), 下面那部分和yi都是常数。
所以可以O(n^2)处理出(x-x1) * (x-x2)… * (x-xn) 这个n次多项式,然后通过模拟长除法,O(n)时间内可以得到(x-x1) *