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

拉格朗日插值小记

时间:2024-10-03 18:33:43浏览次数:9  
标签:拉格朗 limits 插值 sum prod 我们 小记

对于 \(n\) 个点 \((x_i,y_i)\),\(x_i\) 互不相同,则我们可以 唯一 确定一个 \(n-1\) 次多项式经过这 \(n\) 点。

1. 算法介绍

1.1 拉格朗日插值

拉格朗日插值的核心思想是每次只考虑一个点值,将其他点值都视作 \(0\),即对于每一个点 \((x_i,y_i)\),我们构造一个函数 \(f_i(x)\)。

  • 当且仅当 \(x = x_i\) 时 \(f_i(x) = y_i\),当 \(x = x_j(j \not = i)\) 时,\(f_i(x) = 0\)。

这样我们可以构造出经过所有点的函数 \(f(x) = \sum f_i(x)\)。

则我们首先对于每个点 \((x_i,y_i)\),设 \(f_i(x) = \prod\limits_{j \not = i}(x - x_j)\),则显然可以满足上述条件,而我们又要满足 \(f(x_i) = y_i\),则我们可以构造:

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

这样我们可以轻松的用 \(\mathcal{O}(n^2)\) 的复杂度解决。

P4781 【模板】拉格朗日插值

直接套式子即可,逆元可以乘完再逆,写的时候脑子宕机了。

int main(){
	n = read(),k = read();
	for(int i = 1;i <= n;i++)x[i] = read(),y[i] = read();
	ll ans = 0;
	for(int i = 1;i <= n;i++){
		ll s = y[i] % mod;
		for(int j = 1;j <= n;j++){
			if(i == j)continue;
			s = s * (k - x[j] + mod) % mod;
			s = s * ksm((x[i] - x[j] + mod) % mod,mod - 2) % mod;
		}
		(ans += s) %= mod;
	}
	printf("%lld\n",ans);

	return 0;

}

1.2 一些小优化

当这些点值是 \((i,y_i)\) 时,则我们可以分开处理 \(\prod\limits_{i \not = j}x - j\) 与 \(\prod\limits_{i \not = j}i - j\)。

前者我们可以首先算出 \(\prod \limits x - j\),求的时候除个 \((x - i)\) 即可。

后者我们可以分成 \(j < i\) 与 \(j > i\) 两个部分,求出答案是 \((i-1)! \times (n-i)! (-1)^{n-i}\)。

预处理逆元,复杂度 \(\mathcal{O}(n\log{V})\)。

例题: CF622F The Sum of the k-th Powers

即求 \(\sum\limits_{i=1}^n i^k\)。

\(n\) 太大,我们考虑关于 \(k\) 的复杂度。

首先我们可以知道这是一个关于 \(n\) 的 \(k+1\) 次多项式,我们只需要暴力求出前 \(k+2\),即可拉插,复杂度 \(\mathcal{O}(n\log{V})\)

  • 如何证明是一个 \(k+1\) 次多项式呢?

    我们可以归纳证明: 首先懒得奠基。

    假设该结论对所有 \(k < m\) 都成立,则现在证明 \(k = m\) 时成立。

    首先有 \((i+1)^{m + 1} - i^{m + 1} = \sum\limits_{j=0}^m\dbinom {m+1} j i^j\)。

    我们对所有的 \(i\) 求和,左边是个裂项,答案为 \((n+1)^{m+1} - 1\)。

    有 $$(n + 1)^{m+1} - 1 = \sum_{i=1}^{n} \sum_{j=0}^m \dbinom {m+1} j i^j = \sum_{j=0}^m\dbinom {m+1} j \sum_{i=1}^n i^j$$

    把右边 \(j = m\) 移项得 $$\sum_{i=1}^{n} i^m = (n + 1)^{m+1} - 1 - \sum_{j=0}^{m-1}\dbinom {m+1} j \sum_{i=1}^n i^j$$

    左半部分次数为 \(m + 1\),右半部分最大次数为 \(m - 1 + 1 = m\),证毕。

代码

1.3 多项式快速插值

不会

参考文章

只是 Lagrange 插值 - Hagasei-Chan

标签:拉格朗,limits,插值,sum,prod,我们,小记
From: https://www.cnblogs.com/HaoXu-qwq/p/18445600/Lagrange

相关文章

  • acam 小记
    acam作为多模匹配算法,很多东西与kmp相同,另外增添了fail树上操作的关键性质。朴素acam就是trie树,fail指针就是在当前node找一个后缀,使得在其他串存在一个前缀是这个后缀(类似kmp)。trie图,就是简单优化了这个"树上乱跳"的过程,补全每个节点的儿子,类似于路径压缩。其实......
  • 斜优小记
    一个启发是,对于一个\(i\)的两个转移\(j,k\),比较\(j\)与\(k\)的转移优劣。可以用斜率优化的场景:对比后可以分拆出\(slope(j,k)\le\texttt{只和i相关的一些东西}\)的形式。例如P3195,首先写出转移方程\(dp_i=\min\limits_{0\lej<i}\{dp_j+(s_i-s_j+i-j-1-L)^2\}\)比......
  • 万象更新 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模板语法基础......
  • 9.9课堂感想小记Note
    第二个教学周周一艳阳高照得知无法换课SoSad~言归正传这节课还是有一些小收获首先老师带领我们注册了博客(很古老的平台接着老师向我们展示了巧用搜索引擎使用FILETYPE\SITE和INTITLE指令查询特定格式的文件eg.搜索内容➕filetype:doc/ppt..现在很少用电脑浏览器搜索资......
  • 地统计常用公式与概念介绍:插值、平稳假设、变异函数、块金、克里格、线性无偏等
      本文对插值、平稳假设、变异函数、克里格等常用的地学计算概念加以介绍,并对相关公式进行推导。1引言  我们由地学计算的几个基本概念入手,对相关理论方面的内容加以一定了解。  需要注意的是,以下内容如果单独来看或许有些不好理解,但一旦将其与实际应用结合,便会豁然开朗......
  • 技巧小记
    跳跃带修可以考虑\(\sqrt{n}\)分块维护若是跳次数超多可以考虑倍增维护很多有循环/置换环的东西可以把一次转换看成“跳跃”dp抽象网格图抽象:把状态看做网格图上的点,观察性质分层dp抽象:把每层画出,把转移边画出,看是否能通过平移等做内联dp子集枚举for(S=(1<<n......
  • 拉格朗日插值
    应用范围:求一个\(n\)次多项式过\((x_1,y_1)\sim(x_n,y_n)\)构造思想:设\(f_i(x)\)使得对于\(x_i\neqx_j\),\(f(x_j)=0\),且\(f(x_i)=1\),注意并不是对全体\(R\)满足。由上\(F(x)=\sumy_if_i(x)\)即为所求。构造方法:\(f_i(x)=\frac{\prod_{j=1,j\neqi}^n(x-x_......
  • 图的连通性小记
    前言DFS树无向图DFS树定义:DFS树是在图或树结构上进行深度优先搜索时形成的树。在DFS过程中,从一个顶点开始,尽可能深地搜索图的分支,直到达到一个没有未访问邻居的顶点,然后回溯到上一个顶点继续搜索。从点\(r\)开始搜索,每次进入一个点\(i\)对应的边\((fa_i,i)\)为树......
  • 牛顿插值法-C++【可直接复制粘贴/欢迎评论点赞】
    牛顿插值法是一种基于给定数据点集构造插值多项式的方法,用于近似未知函数的值。该方法通过构造差商表并利用该表逐步构建插值多项式。相较于拉格朗日插值法,牛顿插值法的一个显著优势是,当需要增加插值点时,只需重附上一项即可,无需重新计算所有插值点的值。基本概念牛顿插值法的......
  • vue优点/插值表达式/强制绑定
    1.Vue.js的优点体积小:压缩后只有33k;更高的运行效率:基于虚拟DOM,一种可以预先通过JavaScript进行各种计算,把最终的DOM操作计算出来并优化的技术,由于这种DOM操作属于预处理操作,并没有真实的操作DOM,所以叫做虚拟DOM;双向数据绑定:让开发者不用再去操作DOM对象,把更多的精力投入到业务......