拉格朗日插值

最初的拉插

\[f(x) = \sum\limits_{i=1}^n y_i \prod\limits_{j\neq i} \dfrac {x - x_j}{x_i - x_j} \]

重心拉格朗日插值

\[\begin{aligned}f(x) &= \sum\limits_{i=1}^n y_i \dfrac {\prod\limits_{j=1}^n(x-x_j)}{(x - x_i)\prod\limits_{j\neq i}(x_i - x_j)} \\ &=\prod\limits_{j=1}^n(x-x_j) \sum\limits_{i=1}^n \dfrac{y_i}{(x - x_i)\prod\limits_{j\neq i}(x_i - x_j)} \end{aligned} \]

\(g(x) = \prod\limits_{i=1}^n x - x_i, h(i) = \prod\limits_{j\neq i}{x_i - x_j}\),则

\[f(x) = g(x)\sum\limits_{i=1}^n \dfrac{y_i}{(x-x_i)h(i)} \]

计算 \(h(i),g(x)\) 即可 \(\mathrm{O(n)}\)\(f(x)\)

例:\(\texttt{CF1155E Guess the Root}\)

优化 dp

例 1: \(\texttt{ABC208F Cumulative Sum}\)

考虑每个 \(i^k\) 对答案的贡献,则有:

\(ans = \sum\limits_{i=1}^n i^k\dbinom{n-i+m-1}{m-1} = \dfrac 1 {(m-1)!}\sum\limits_{i=1}^n i^k \dfrac{(n-i+m-1)!}{(n-i)!}\)

\(i^k\) 是关于 \(i\)\(k\) 次多项式,\((n-i+m-1)!\) 是关于 \(i\)\(n+m-1\) 次多项式,\((n-i)!\) 是关于 \(i\)\(n\) 次多项式,则答案为关于 \(i\)\(k+m\) 次多项式,直接取 \(i \in [1,k+m+1]\)\(f(i,m)\) 做拉格朗日插值即可,时间复杂度 \(\mathrm{O(km)}\)

\(\texttt{ac记录}\)

例 2: \(\texttt{[集训队互测 2012] calc}\)

只考虑上升序列的权值,暴力 \(dp\),记 \(dp(i,j)\) 表示前 \(i\) 个数的权值 \(\in [1,j]\) 的权值和,则有转移:

\[dp(i,j) = dp(i-1,j-1) * j + dp(i,j-1) \]

这可以看作是一个多项式 \(f_i(j)\) ,设 \(f_i(j)\) 的次数为 \(g(i)\)

\(f_i(j) - f_i(j-1) = f_{i-1}(j-1) * j\) 可知 \(g(i) - 1 = g(i - 1) + 1\)

由此得到 \(g(i) = g(i - 1) + 2\),由 \(g(0) = 0\) 知答案 \(dp(n,k)\) 为关于 \(k\)\(2n\) 次多项式,直接取 \(2n+1\) 个点拉格朗日插值即可,时间复杂度 \(\mathrm{O(n^2)}\)

\(\texttt{ac记录}\)

posted @ 2021-12-06 16:23  klii  阅读(149)  评论(0)    收藏  举报