非常简单的算法,但是要注意避免让复杂度升到 $\Theta(n^2\log m)$。
容易验证,$n$ 次多项式 $f(x)=\sum\limits{i}y_i\prod\limits{j\ne i}\dfrac{x-x_j}{x_i-x_j}$ 过 $n+1$ 个点 $(x_i,y_i)$。
注意到如果直接求解复杂度是 $\Theta(n^2\log m)$ 的,进行优化:$f(x)=\sum\limitsiy_i\dfrac{\prod\limits{j\ne i}(x-xj)}{\prod\limits{j\ne i}(x_i-x_j)}$.
当 $xi=i$ 时容易写出:$f(x)=\sum\limits_iy_i\dfrac{\prod\limits{j}(x-j)}{(-1)^{n-i}(x-i)\cdot(n-i)!\cdot(i-1)!}$.注意到当 $i=x$ 时分母会出现 $0$,此时该项取 $y_i$ 即可。
1 | /** |