模板:拉格朗日插值(多项式)

所谓拉格朗日插值,就是在“拉格朗日”进行的一项民俗活动。拉格朗日通常在每年2月的第82个星期三。

(逃)

前言

非常强大的算法。
当可以证明某个函数是一个 kkk 次多项式时,我们就可以插入 k+1k+1k+1 个函数值并快速的求出我们要求的函数值。

拉格朗日插值

情境:

对于一个 n−1n-1n1 次的多项式,若给出了 nnn 个形如 f(xi)=yyf({x_i})=y_yf(xi)=yy 的条件(xix_ixi 互不相同),请你对于给出的 kkk,求出对应的函数值 f(k)f(k)f(k)

首先,可以证明,这个函数是存在且唯一的。

我们写出一个函数,形如:
f(x)=∑i=1nyi∏j≠ix−xjxi−xjf(x)=\sum_{i=1}^ny_i\prod_{j\ne i}\frac{x-x_j}{x_i-x_j}f(x)=i=1nyij=ixixjxxj
对于第 iii 项,当 x=xj(j≠i)x=x_j(j\ne i)x=xj(j=i) 时,会得到0,x=xix=x_ix=xi 时,会得到 yiy_iyi
所以,这个函数时满足给出的 nnn 个条件的,又由于这个东西显然是 n−1n-1n1 次的,所以它就是我们要找的那个唯一确定的函数。
那么我们直接把 kkk 往里代就好了,时间复杂度 O(n2)O(n^2)O(n2)

ll lagrange(int n,ll *x,ll *y,ll k){k%=mod;ll res(0);for(int i=1;i<=n;i++){ll s1=1,s2=1;for(int j=1;j<=n;j++){if(i==j) continue;(s1*=(m-x[j]+mod))%=mod;(s2*=(mod+x[i]-x[j]))%=mod;}(res+=y[i]*s1%mod*ksm(s2,mod-2)%mod)%=mod;}return res;
}

连续函数值的快速插值

很多时候,我们插入的 nnn 个值可以是 f(1),f(2),...,f(n)f(1),f(2),...,f(n)f(1),f(2),...,f(n)。此时可以在 O(n)O(n)O(n) 的复杂度内进行插值。
把原来的式子的 xix_ixi 全都换成 iii,就变成:
f(x)=∑i=1nyi∏j≠ix−ji−jf(x)=\sum_{i=1}^ny_i\prod_{j\ne i}\frac{x-j}{i-j}f(x)=i=1nyij=iijxj
这个东西就非常好看,我们随便预处理出 一些前缀和和逆元就可以 O(1)O(1)O(1) 求出 ∏\prod 里的结果。
总复杂度 O(n)O(n)O(n)

ll lagrange(int n,ll *y,ll k){//consecutivek%=mod;jc[0]=1;for(int i=1;i<=n;i++) jc[i]=jc[i-1]*i%mod;ni[n]=ksm(jc[n],mod-2);for(int i=n-1;i>=0;i--) ni[i]=ni[i+1]*(i+1)%mod;pre[0]=1;for(int i=1;i<=n;i++) pre[i]=pre[i-1]*(k-i)%mod;suf[n+1]=1;for(int i=n;i>=1;i--) suf[i]=suf[i+1]*(k-i)%mod;ll res(0);for(int i=1;i<=n;i++){ll add=y[i]*pre[i-1]%mod*suf[i+1]%mod*ni[i-1]%mod*ni[n-i]%mod;if((n-i)&1) add=mod-add;(res+=add)%=mod;}return res;
}

重心拉格朗日插值

有的时候我们需要动态的插点,每一次都 O(n2)O(n^2)O(n2) 的重新计算是我们不能接受的。
看原式:
f(k)=∑i=1n+1yi∏j≠ik−xjxi−xjf(k)=\sum_{i=1}^{n+1}y_i\prod_{j\ne i}\frac{k-x_j}{x_i-x_j}f(k)=i=1n+1yij=ixixjkxj
设:
g(k)=∏i=1n+1(k−xi)g(k)=\prod_{i=1}^{n+1}(k-x_i)g(k)=i=1n+1(kxi)
ti=∏j≠i1xi−xjt_i=\prod_{j\ne i}\frac{1}{x_i-x_j}ti=j=ixixj1
那么原式可以写成:
f(k)=g(k)∑i=1n+1yitik−xif(k)=g(k)\sum_{i=1}^{n+1}\frac{y_it_i}{k-x_i}f(k)=g(k)i=1n+1kxiyiti
每次加入一个点时,暴力计算其重心 ttt 并更新其他点的重心即可。
单次复杂度达到 O(kn)O(kn)O(kn)kkk 为求逆元复杂度)。

应用:对函数为多项式形式的证明和对多项式次数的求解

我们要用拉格朗日插值,前提当然得是这个东西得是一个多项式,并且得求出它的次数。(这也往往是拉格朗日插值的难点)

并不是所有的函数都是多项式的! 比如,最简单的正弦函数就是一个无穷项数的函数(它的零点有无穷个)

例题:calc
看这篇博客吧。

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

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

相关文章

程序员修神之路--分布式缓存的一条明路(附代码)

菜菜呀&#xff0c;由于公司业务不断扩大&#xff0c;线上分布式缓存服务器扛不住了呀程序员主力 Y总如果加硬件能解决的问题&#xff0c;那就不需要修改程序菜菜我是想加服务器来解决这个问题&#xff0c;但是有个问题呀程序员主力 Y总&#xff1f;&#xff1f;&#xff1f;菜…

2019 ICPC Asia Nanjing Regional

题号题目难度知识点AA Hard Problem签到题思维题BChessboardCDigital Path签到题dfs记忆化搜索DHolesEObservationFPaper GradingGPoker GameHPrince and Princess四稳铜快银思维题ISpace StationJSpyKTriangle三题快铜计算几何

uoj#751-[UNR #6]神隐【交互】

正题 题目链接:https://uoj.ac/problem/751 题目大意 有一棵nnn个点的树&#xff0c;你每次可以选择一个边集&#xff0c;交互库会返回你所有联通块&#xff0c;要求这棵树。 n≤2000n\leq 2000n≤2000&#xff0c;操作次数不超过141414。 或 n≤131072n\leq 131072n≤131072…

模板:快速莫比乌斯变换(FMT)+快速沃尔什变换(FWT)(多项式)

文章目录前言解析OR定义变换&#xff1a;逆变换代码AND代码XOR定义变换逆变换代码所谓快速沃尔什变换&#xff0c;就是快速的沃尔玛什锦专柜变换 &#xff08;逃&#xff09; 前言 正常卷积的定义&#xff1a;ck∑ijkaibjc_k\sum_{ijk}a_ib_jck​∑ijk​ai​bj​。 可以用FFT…

[AtCoder Beginner Contest 216] 题解

文章目录A - Signed DifficultyB - Same NameC - Many BallsD - Pair of BallsE - Amusement ParkF - Max Sum CountingG - 01Sequence比赛链接A - Signed Difficulty 签到题 #include <cstdio> int x, y; char c; int main() {scanf( "%d%c%d", &x, &am…

长沙.NET技术社区正式成立

感谢大家的关注&#xff0c;请允许我冒昧的向大家汇报长沙.NET技术社区第一次交流会的会议进展情况。活动过程汇报2019年2月17日&#xff0c;继深圳&#xff0c;广州&#xff0c;西安&#xff0c;成都&#xff0c;苏州相继成立了.net社区之后&#xff0c;酝酿已久的长沙.net社区…

A Hard Problem

A Hard Problem 题意&#xff1a; 给定一个n&#xff0c;要求找到最小的正数k&#xff0c;使得在集合T中任意选K个数&#xff0c;其中存在两个不同的u和v&#xff0c;u是v的因子 题解&#xff1a; 一开始想偏了&#xff0c;往质因数方向想了&#xff0c;然后因为1e9的以内的…

hdu7207-Find different【burnside引理】

正题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid7207 题目大意 一个序列aaa&#xff0c;和它相同的序列当且仅当能通过以下操作实现相同&#xff1a; 将a1a_1a1​丢到ana_nan​&#xff0c;其余的向前移动一位。令所有ai(ai1)%ma_i(a_i1)\%mai​(ai​1)%m 对于n…

洛谷P6097:【模板】子集卷积(FWT)

解析 完全可以当一道 DP 题而不是模板来做。 首先第一个条件&#xff1a; i∣jki|jki∣jk 比较简单&#xff0c;直接上FWT板子即可。 考虑第二个条件&#xff1a;i&j0i\&j0i&j0。若设 ∣x∣|x|∣x∣ 表示二进制下 1 的个数&#xff0c;那么就有&#xff1a; ∣i∣…

Asp.NetCore轻松学-部署到 IIS 进行托管

前言经过一段时间的学习&#xff0c;终于来到了部署服务这个环节&#xff0c;.NetCore 的部署方式非常的灵活多样&#xff0c;但是其万变不离其宗&#xff0c;所有的 Asp.NetCore 程序都基于端口的侦听&#xff0c;在部署的时候仅需要配置侦听地址、端口&#xff08;一个或者多…

线段树/扫描线问卷调查反馈——Rmq Problem / mex(主席树),Boring Queries(二分+st表+主席树),Colorful Squares(扫描线)

文章目录Rmq Problem / mexBoring QueriesColorful SquaresRmq Problem / mex luogu4137 对aia_iai​建权值线段树 再加上可持久化 对于第RRR个版本的线段树&#xff0c;每个叶子xxx存的是aixa_ixai​x的所有iii中最大的小于RRR的位置iii 那么询问[L,R][L,R][L,R]就转化成…

C - Digital Path 计蒜客 - 42397 05-29

C - Digital Path 计蒜客 - 42397 题意&#xff1a; 题意就是给出一个n ∗ m的数字矩阵每个矩阵元素之间只能上下左右走&#xff0c;而且下一个位置必须比当前位置的数字大1&#xff0c;入口和出口必须数边缘元素&#xff0c;求可以有多少条路径。 题解&#xff1a; 第一反…

响应式编程知多少 | Rx.NET 了解下

1. 引言An API for asynchronous programming with observable streams. ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming.ReactiveX 使用可观察数据流进行异步编程的API。 ReactiveX结合了观察者…

数据结构之trie树——First! G,电子字典,Type Printer,Nikitosh and xor

文章目录[USACO12DEC]First! G[JSOI2009]电子字典[IOI2008] Type PrinterNikitosh and xor[USACO12DEC]First! G luogu3065 考虑每一个字符串成为答案的可能 这意味着从字典树根到字符串最后一位就恰好对应重新定义的字典序 在第iii层的时候&#xff0c;想要走特定点&#…

H - Prince and Princess 计蒜客 - 42402

H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主&#xff0c;有三种人&#xff0c;第一种是说真话的人(至少为1&#xff0c;因为公主是说真话的人)&#xff0c;第二种人是只会说假话的&#xff0c;第三种是胡说八道的(说的话真假都有可能)。现在给你三种人的…

模板:min-max容斥离散随机变量的几何分布(洛谷P3175:[HAOI2015]按位或)

前言 见到一道神题&#xff0c;学会两个知识点… 都是数学。 min-max容斥 给出式子&#xff1a; max⁡(S)∑T⊂S(−1)∣T∣1min⁡(T)\max(S)\sum_{T\sub S}(-1)^{|T|1}\min(T)max(S)T⊂S∑​(−1)∣T∣1min(T) min⁡(S)∑T⊂S(−1)∣T∣1max⁡(T)\min(S)\sum_{T\sub S}(-1)^…

杭电多校杂题收录

前言 和学长学弟一起打的hdu多校&#xff0c;打的很菜没啥难题收录&#xff0c;因为难的我都不会做。 正题 hdu7152-Copy 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid7152 题目大意 nnn个数字的序列aaa&#xff0c;mmm次操作&#xff0c;每次将一段[l,r][l,r][l,r…

.NET Core中的验证组件FluentValidation的实战分享

今天有人问我能不能出一篇FluentValidation的教程&#xff0c;刚好今天在实现我们的.NET Core实战项目之CMS的修改密码部分的功能中有用到FluentValidation&#xff0c;所以就以修改用户密码为实例来为大家进行一下ASP.NET Core中的验证组件FluentValidation的实战分享&#xf…

笛卡尔树详解带建树模板及例题运用(Largest Submatrix of All 1’s,洗车 Myjnie,Removing Blocks,SPOJ PERIODNI)

文章目录笛卡尔树介绍例题Largest Submatrix of All 1’s应用「POI2015」洗车 Myjnie[AGC028B] Removing BlocksSPOJ PERIODNI笛卡尔树 介绍 笛卡尔树是一种数据结构&#xff0c;每个点由两个值&#xff0c;键值key和权值val&#xff0c;组成 其键值满足二叉树性质 即点的左子…

K - Triangle 计蒜客 - 42405

K - Triangle 计蒜客 - 42405 题意&#xff1a; 给你一个三角形的三点&#xff0c;再给你三角形边上一个点&#xff0c;让你求另一个点(也要在三角形上)&#xff0c;使得平分三角形的面积 题解: 计算几何 三角形的三边ab&#xff0c;ac&#xff0c;bc 如果点p在ab上&#x…