拉格朗日插值小记

对于 \(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/807540.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

独立站如何批量查收录,教你独立站如何批量查收录的简单方法

独立站批量查收录是提升网站SEO效果的重要步骤。以下提供几种简单且实用的方法,帮助你高效地批量查询独立站的收录情况: 一、使用搜索引擎的Site指令结合自动化脚本 了解Site指令: 在搜索引擎(如谷歌)的搜索框中输入“site:域名”(替换为你的实际域名),执行搜索后,可以…

谷歌收录查询工具,告诉你谷歌收录查询工具使用指南

谷歌收录查询工具是网站管理员和SEO专家用于监控和管理网站在谷歌搜索结果中表现的重要工具。以下是一份详细的谷歌收录查询工具使用指南,旨在帮助你更好地了解和使用这些工具。 一、Google Search Console(谷歌搜索控制台) Google Search Console是谷歌官方提供的免费工具,…

『模拟赛』多校A层冲刺NOIP2024模拟赛01

『模拟赛记录』多校A层冲刺NOIP2024模拟赛01Rank 打得还可以总A. 构造字符串 签,但是挂了 40pts。 发现判条件只有相等和不相等,于是想到并查集维护连通块,将强制相同的两个位置的连通块合并,强制不同的先记下,最后统一判断。 重点在细节处理,合并连通块时要将位置靠后的…

CSS display属性 inline-block flex grid

CSS display inline-block flex grid ======================================= CSS的display属性是一个核心属性,用于控制元素如何在页面布局中显示,包括其盒模型的行为。以下是display属性的一些常见值及其示例代码:1. block 说明:将元素变为块级元素,独占一行,可以…

[39] (多校联训) A层冲刺NOIP2024模拟赛01

你们不感觉最近机房网越来越慢了吗,现在下个 10M 的东西要用三分钟,而且期间访问不了网站 整个机房分 1000Mbps 的带宽为啥只能分这么一点, huge 拿我电脑挖矿了? 本来以为多校就是多校的,结果是真的多校,一百一十多个人在一块考 huge: 参加的都是咱们北方这几个强校 你说…

事故分享——关于Conda激活环境失败并报gbk相关错误

事情是今天打开了pwsh,突然发现conda的环境没了,启动时提示:UnicodeEncodeError: gbk codec cant encode character \xe5 in position 884: illegal multibyte sequence在网上搜索了许多相关的资料,一度怀疑是代理等问题。 进行过的尝试:清理conda缓存,更新conda版本,删…

【闲话】高一上运动会

“加油,加油!”虽然没有上场,但记忆也为本次运动会的举办做出了许多努力!想喝矿泉水的话,就请记忆帮你拿一瓶吧!心跳节拍弥梦离 “加油,加油!”虽然没有上场,但记忆也为本次运动会的举办做出了许多努力!想喝矿泉水的话,就请记忆帮你拿一瓶吧!活力四射超神龙女 代表…

信息学奥赛复赛复习10-CSP-J2020-03表达式求值-栈、后缀表达式、isdigit函数、c_str函数、atoi函数、链式前向星、数据结构、深度优先搜索

PDF文档公众号回复关键字:202410031 P7073 [CSP-J2020] 表达式 [题目描述] 小 C 热衷于学习数理逻辑。有一天,他发现了一种特别的逻辑表达式。在这种逻辑表达式中,所有操作数都是变量,且它们的取值只能为 0 或 1,运算从左往右进行。如果表达式中有括号,则先计算括号内的子…

群晖docker实现稍后阅读wallabag

开篇 本文基于 docker 和 github 开源项目 wallabag 关于群晖安装, 在项目的说明文档里面显示他们在群晖社区里面提供了一个套件, 但我在添加社区以后并没有找到, 所以采用了 docker 方式 拉取镜像Ssh 链接群晖, sudo -i 进入 root 权限 使用命令 docker run -v /opt/wallabag/…

bing chat 该服务在你所在的地区不可用。

一是:在浏览器搜索结果页-更多中,将国家或地区更改为非中国大陆。 二是:在浏览器设置-语言中,将语言更改为非中文简体的语言,这里语言是可以更改回来。 三是:重新注册一个新的Microsoft 账号,推荐谷歌邮箱进行注册。编程是个人爱好

[错误代码]SQLSTATE[HY000] [1045] Access denied for user 20241001@localhost (using password: YES)

这个错误提示 SQLSTATE[HY000] [1045] Access denied for user 20241001@localhost (using password: YES) 表示 MySQL 认证失败,通常是由于用户名或密码不正确导致的。 解决方法检查用户名和密码 确认使用的用户名和密码是否正确。重置密码 如果忘记密码,可以重置密码。检查…

国庆快乐!附ssh实战

小伙伴们,有一段时间没更新了,目前在中科院软件所实习,在这里我祝大家国庆快乐!今天这一期带来ssh命令的实战教程,ssh在工作当中遇到的非常多,因为总是需要登服务器,而且玩法也有不少,这是我常用的几个玩法。 1、Windows直接连接虚拟机启动的Linux。 ssh user@IPV42、从…