首页 > 其他分享 >拉格朗日插值

拉格朗日插值

时间:2024-11-06 20:46:43浏览次数:3  
标签:拉格朗 frac limits 插值 多项式 复杂度 Theta prod

拉格朗日插值

基本介绍

  • 对于一个 \(n\) 次多项式 \(f(x)=\sum\limits_{i=0}^nf_ix^i\),给出其 \(n+1\) 个位置上的值,即 \(\forall 1\leq i\leq n+1,f(x_i)=y_i\),你需要对于给定的 \(X\),求出 \(f(X)\) 的值。

仿照中国剩余定理,构造 \(g_i(x)\) 使得 \(g_i(x_j)=[i=j]\),具体构造为 $$g_i(x)=\prod\limits_{j\neq i}\frac{x-x_j}{x_i-x_j}$$。

这个构造不难证明是符合要求的:

当 \(x=x_i\) 时,所有分子分母都相同,\(g_i(x)=1\)。

当 \(x=x_j(i\neq j)\) 时,一定存在一项分子为 \(0\) ,故\(g_i(x)=0\)。

那么 \(f(x)=\sum\limits_{i=1}^{n+1}y_ig_i(x)\)。

暴力带入计算的复杂度为 \(\Theta(n^2)\)。

P4781 【模板】拉格朗日插值

特殊情况

实践中经常有 \(x_i=i\) ,此时我们尝试化简一下上面的式子:

\[g_i(x)=\prod\limits_{j\neq i}\frac{x-j}{i-j}=\prod\limits_{j=1}^{i-1}\frac{x-j}{i-j}\prod\limits_{j=i+1}^{n+1}\frac{x-j}{i-j}=\frac{1}{(i-1)!}\prod\limits_{j=1}^{i-1}(x-j)\frac{(-1)^{n+1-i}}{(n+1-i)!}\prod\limits_{j=i+1}^{n+1}(x-j) \]

\(O(n)\),预处理 \((x-j)\) 的阶乘,阶乘逆元,前缀积和后缀积,就可以做到 \(\Theta(1)\) 查询 \(g_i(X)\)了。

总复杂度 \(\Theta(n)\)。

CF622F The Sum of the k-th Powers

可以证明自然数幂和是关于 \(n\) 的 \(k+1\) 次多项式,我们取 \(n+2\) 个位置 \(x=1,2,3,\dots n+2\),计算出其函数值,之后应用上述拉插求出答案即可。

复杂度 \(\Theta(k)\)。

优化 DP

CF995F Cowmpany Cowmpensation

暴力 \(dp\) 是 \(O(nD)\) 的,要优化。

硬组合容斥应该也行,但是不够无脑。

因为本质不同的值只有 \(\Theta(n)\) 种,所以 \(dp\) 值是一个关于 \(D\) 的 \(n\) 次函数,那么带入 \(n+1\) 个 \(D\) 值求出 \(dp\),然后插出来就行。

复杂度 \(\Theta(n^2)\)。

P4463 [集训队互测 2012] calc

思路差不多。

[省选联考 2022] 填树

考虑钦定最小值 \(l\),算出所有值都在 \([l,l+K]\) 中的方案数,然后容斥减掉 \([l+1,l+K]\) 中的方案数。

考虑对于一个节点,对于不同的 \(l\) 产生的贡献是一个分 \(5\) 段的一次函数,那么把所有节点的段点拿出来总共就会把值域分成 \(O(n)\) 段,每段内所有节点都是一次函数,乘起来就是 \(n\) 次函数。

\(n\) 次函数的前缀和是 \(n+1\) 次函数,因此我们把每一段内拿出来做一个拉格朗日插值就可以了,第二问同理。

复杂度 \(\Theta(n^3)\)。

[NOI2019] 机器人

与上一题套路差不多,分段之后每段内拉插优化 \(dp\) 即可。

更进一步

如果我们不只满足于求 \(f(X)\),而是想要求出 \(f_0,f_1\dots f_n\),怎么办?

暴力是 \(O(n^3)\) 的。

考虑先 \(O(n^2)\)求出 \(F(x)=\prod\limits_{i=1}^n(x-x_i)\),然后每次就是要查询 \(\frac{F(x)}{(x-x_i)}\),短除法就行。

复杂度 \(O(n^2)\)。

这种东西经常可以优化一些卷积式。

对于多项式 \(F(x),G(x)\),如果我们求出 \(f(i)=\sum\limits_jF_ji^j,g(i)=\sum\limits_jG_ji^j\),那么 \((f\times g)(i)=f(i)g(i)\),然后再插值还原出系数就行。

当然这样还是 \(O(n^2)\) 看起来没啥用。

但是如果我们要计算多项式 \(F_1\times F_2\dots \times F_m\),每个多项式次数为 \(n\),那么暴力卷积复杂度是 \(O(mn^2)\),而该做法就可以做到 \(O(nm)\)。

CF1874E Jellyfish and Hack

暴力 \(dp\) 是 \(O(n^6)\) 的,瓶颈在于卷积,我们带入一些点值,然后把 \(dp\) 值看做多项式的系数,这样中间的所有卷积都转化为了点值的乘法,这样复杂度 \(\Theta(n^4)\)。

CF917D Stranger Trees

将树边的权值设为 \(x\),非树边设为 \(1\),那么矩阵树定理求出的答案多项式的 \(k\) 次项系数就是有恰好 \(k\) 条树边的方案数,

暴力维护多项式不可接受,因此带入点值运算,最后拉插还原。

复杂度 \(O(n^4)\)。

[省选联考 2024] 重塑时光

标签:拉格朗,frac,limits,插值,多项式,复杂度,Theta,prod
From: https://www.cnblogs.com/jesoyizexry/p/18531007

相关文章

  • 7.10 已知一组观测数据,如表中7.17.excel(表中第一列为x的值,第二列为y的值)。试用插值方
    importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltfromscipy.interpolateimportinterp1d,PchipInterpolator,CubicSplinefromscipy.optimizeimportcurve_fitfromscipy.statsimportnormfile_path='7.17.xlsx'data=pd.rea......
  • 增广拉格朗日iLQR时空联合规划代码简介与再开发8-状态转移方程
    增广拉格朗日iLQR时空联合规划代码简介与再开发7-系统模型DiscreteDynamics和ContinuousDynamics类-CSDN博客https://blog.csdn.net/weixin_46006849/article/details/143238871增广拉格朗日iLQR时空联合规划代码简介与再开发-前言_时空联合规划算法-CSDN博客https://blog.cs......
  • 基于拉格朗日插值多项式的Shamir's Secret Sharing 加密算法
    Shamir'sSecretSharing是一种加密算法,由AdiShamir于1979年提出,旨在将一个秘密(如密码、密钥等)分割成多个部分,并分发给不同的参与者。只有当足够数量的参与者(大于等于一个特定的阈值)将他们的份额组合在一起时,秘密才能恢复。少于阈值数量的参与者无法得到任何有用的信息。核心......
  • 格点拉格朗日插值与PME算法
    技术背景在前面的一篇博客中,我们介绍了拉格朗日插值法的基本由来和表示形式。这里我们要介绍一种拉格朗日插值法的应用场景:格点拉格朗日插值法。这种场景的优势在于,如果我们要对整个实数空间进行求和或者积分,计算量是随着变量的形状增长的。例如分子动力学模拟中计算静电势能,光是......
  • 插值方法笔记
    插值方法笔记插值法简介插值法的目标是通过已知的离散数据点,构造一个连续函数来估计未知点的值。在实际应用中,随着数据点的增加或问题的复杂化,插值方法也逐步演进。1.泰勒插值(TaylorInterpolation):局部展开的尝试泰勒插值基于函数在某一点的导数信息进行展开,适合在该点附近做......
  • 拉格朗日插值法
    技术背景2024年诺贝尔物理学奖和化学奖的揭幕,正式宣告了科学界对AI时代的认可,人工智能正在全方位的改变人类社会各种场景的互作模式,而数据拟合以及误差与算力的控制,则是大多数人工智能工作者所关注的重点。与数据拟合的思想不同的是,传统的数值计算中人们更倾向于使用多项式进行精......
  • 增广拉格朗日iLQR时空联合规划代码简介与再开发3-iLQR目录
    增广iLQR-时空联合规划算法代码简介与再开发-前言_时空联合优化器-CSDN博客文章浏览阅读294次,点赞6次,收藏11次。简单来说就是同时求解路径与速度曲线。时空联合规划本质上是求解最优化问题,将路径和速度曲线作为优化问题的变量,同时得到二者在可行范围内的最优解。前言介绍LQR和......
  • 插值方法
    插值是什么在工程中,我们经常要用一条曲线将一些点依次连接起来,称为插值。插值的可行性证明插值法定理:对n+1个不同的节点有唯一多项式\(\phi(x)=a_0+a_1x+\cdots+a_nx^n\),使得\(\phi_n(x_j)=y_j(j=0,1,2,\cdots,n)\)证明:将\(x_0\)到\(x_n\)带入多项式能得到一个线性方程组,AX......
  • 拉格朗日插值小记
    对于\(n\)个点\((x_i,y_i)\),\(x_i\)互不相同,则我们可以唯一确定一个\(n-1\)次多项式经过这\(n\)点。1.算法介绍1.1拉格朗日插值拉格朗日插值的核心思想是每次只考虑一个点值,将其他点值都视作\(0\),即对于每一个点\((x_i,y_i)\),我们构造一个函数\(f_i(x)\)。当......
  • 万象更新 Html5 - vue.js: vue 模板语法基础(MVVM, 插值, 指令等)
    源码https://github.com/webabcd/Html5作者webabcd万象更新Html5-vue.js:vue模板语法基础(MVVM,插值,指令等)示例如下:vue\basic.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>vue模板语法基础......