插值(例题未完)

插值

标签(空格分隔): 插值 数学 笔记


概述

已知平面上\(n+1\)点,求过这\(n+1\)个点的唯一\(n\)次多项式

有一个朴素算法用待定系数法,高斯消元\(O(n^3)\)

拉格朗日插值

通式

\(n\)次多项式

构造\(n+1\)个拉格朗日多项式\(\delta_i(x)=\prod_{t\ne i}\frac{x-x_t}{x_i-x_t}\)

\(\delta_i(x_j)=[i=j]\)\(\displaystyle{\sum{\varrho_i(x)y_i}}\)

可代入验证

\(CRT\)构造有异曲同工之妙

实现

构造\(\delta(x)=\prod{(x-x_t)}\)

\(\delta_i(x)=\frac{\delta(x)}{(x-x_i)}\prod_{t\ne i}\frac{1}{x_i-x_t}\)

\(O(n^2)\)即可

若只要求值不要系数也可以\(O(n^2)\)

线性插值

满足

  • 给出的点横坐标差为定值
  • 只要求求出特殊点的值并非系数

时拉格朗日插值存在\(O(n)\)的算法

具体实现以\(x_i=i\)

维护数列\(pre_i=\prod\limits_{j=0}^i (x_0-j)\)

\(suf_i=\prod\limits_{j=i+1}^n (x_i-j)\)

\(\sigma_i=\frac{A}{B}\)

则分子\(A=pre_{i-1}*suf_{i+1}\)

分母\(B=i(i-1)\cdots(2)(1)(-1)(-2)\cdots(i-n)=(-1)^{n-i}i!(n-i)!\)

维护阶乘逆元即可

int lagrange(re int y[],re int x){
    re int i,up,down,res=0;if(x<=m+1)return g[x];
    pre[0]=x;for(i=1;i<=m;++i)pre[i]=1ll*pre[i-1]*(x-i)%mod;
    suf[m]=x-m;for(i=m-1;~i;--i)suf[i]=1ll*suf[i+1]*(x-i)%mod;
    for(i=0;i<=m;++i){
        up=1ll*(i?pre[i-1]:1)*(i^m?suf[i+1]:1)%mod*y[i]%mod,down=((m-i)&1?-1ll:1ll)*inv[i]%mod*inv[m-i]%mod;
        res=(res+1ll*up*down)%mod;
    }
    return (res+mod)%mod;
}

例题

\(\mathtt{BSOJ5251}\):裸的模板用两种方法都来一次

\(\mathtt{BSOJ5239}\):求\(f(n)=\sum_{i=1}^n i^k\)
首先通过阿贝尔求和定理可知\(f\)是一个\(k+1\)次多项式

因此需要\(k+2\)个点,取\(x_i=i(i\in[0,k+2))\)即可,注意这一步使用批量求次幂方法

即线性筛过程中,素数直接快速幂\(T(n)=O(|P|)*O(\log n)=O(n)\),其余用最小素因子更新,不然会超时

\(\mathtt{BSOJ1522}\):设\(f(n)=\sum_{i=1}^n i^k,g(n)=\sum_{i=1}^n f(i)\)\(h(n)=\sum_{i=1}^n g(a+id)\)

k考虑\(f\)\(k+1\)次多项式,则\(g\)\(k+2\)次多项式,\(a+id\)是一次的,因此\(h\)也是\(k+2\)次多项式

直接算\(g\)的前\(k+3\)项,然后一项一项插回去即可

\(\mathtt{BSOJ4752}\):求\(f_d(n)=\sum\limits_{i=1}^n[(i,n)=1]i^d\)
可以轻易反演如下

\(f_d(n)=\sum_{p|n}\mu(d)p^d\sum\limits_{i=1}^{\frac{n}{p}}i^d\)

与之前的反演不同的是后面的一坨不是积性函数

\(S(x)=\sum\limits_{i=1}^x i^k\)插值后\(S(x)=\sum\limits a_ix^i\)

$LHS=\sum_{p+n}\mu(d)p^d\sum\limits_i a_i(\frac{n}{p})^i

\=\sum_{i}a_i\sum_{p|n}\mu(p)p^d (\frac{n}{p})^i$

\(g_i(n)=\sum_{p|n}\mu(p)p^d (\frac{n}{p})^i\)这是个积性函数

题目给的比较特殊,大概意思是给出\(n\)的素因子及次数

考虑\[\begin{aligned} g_i(p^q) &=\sum _{j=0}^q \mu(p^j)p^{jd}(\frac{p^q}{p^j})i = \left\{\begin{aligned} p^{qi},j=0\\-p^{qi+d-i},j=1\\ 0, otherwise\end{aligned} \right. \end{aligned}\]
\(\therefore \begin{aligned} g_i(p^q) =p^{qi}-p^{qi+d-i} \end{aligned}\)
乘起来即可
这道题套路:多项式不是积性函数就拆成单项式

牛顿插值

牛顿级数公式

实质是离散的麦克劳林公式(泰勒展开)

\(f(x)=\displaystyle{\sum\Delta^if(0)\binom{x}{i}}\)

举个例子

对一个函数差分如下

\(\Delta^0~1~3~7~13~21\)
\(\Delta^1~~~~~2~4~6~8\)
\(\Delta^2~~~~~~2~2~2\)
\(\Delta^3~~~~~~~~0~0\)
\(\Delta^4~~~~~~~~~~0\)

\(f(x)=1\binom{n}{0}+2\binom{n}{1}+2\binom{n}{2}+0\binom{n}{4}+0\binom{n}{5}\)

运用

动态插值,人力插值

卷积形式

对高阶差分直接展开

\(\Delta ^nf(0)=\sum\binom{n}{i}(-1)^{n-i}f(i)\)
事实上是一个卷积
\(\Delta ^nf'=f'*e^{-x}\)
还可以二项式反演
\(f(i)=\sum\binom{n}{i}\Delta^if(0)\)
也是一个卷积
\(f'=\Delta ^nf'*e^x\)
同样是一个卷积
(这里没有同除一个阶乘)

线性插值

\(\mathtt{BLOG}\)

例题

\(\mathtt{BSOJ3905}\):见之前的笔记

\(\mathtt{BSOJ5424}\):求\(\sum\limits_{k=0}^n f(k)\binom{n}{k}x^k(1-x)^{n-k}\)

优雅在用牛顿插值使得式子可以转成二项式反演形式

猜你喜欢

转载自www.cnblogs.com/66t6/p/12275165.html
今日推荐