一、引入

我们会遇到这样的问题:
给定 nnn 个点 (xi,yi)" role="presentation" style="position: relative;">(xi,yi)(xi,yi)(x_i,y_i) ,求一个 n−1n−1n-1 次多项式函数 f(x)f(x)f(x) ,
使对于每个 iii ,都有 f(xi)=yi" role="presentation" style="position: relative;">f(xi)=yif(xi)=yif(x_i)=y_i 。
其中 xixix_i 互不相同。
利用线性代数的知识可以得出有且仅有一个 f(x)f(x)f(x) 满足条件。

二、结论

下面直接给出结论:

f(x)=∑i=0n−1yi∏j=0,j≠in−1x−xjxi−xjf(x)=∑i=0n−1yi∏j=0,j≠in−1x−xjxi−xj

f(x)=\sum_{i=0}^{n-1}y_i\prod_{j=0,j\ne i}^{n-1}\frac{x-x_j}{x_i-x_j}
复杂度 O(n2)O(n2)O(n^2) 。

三、证明

对于任意 0≤k<n0≤k<n0\le k ,将 xkxkx_k 代入公式:
对于 i=ki=ki=k ,有 xi=xkxi=xkx_i=x_k :

yk∏j=0,j≠kn−1xk−xjxk−xj=ykyk∏j=0,j≠kn−1xk−xjxk−xj=yk

y_k\prod_{j=0,j\ne k}^{n-1}\frac{x_k-x_j}{x_k-x_j}=y_k
而对于 i≠ki≠ki\ne k ,在满足 0≤j<n,j≠i0≤j<n,j≠i0\le j 的 jjj 中一定有一个 j=k" role="presentation" style="position: relative;">j=kj=kj=k 。
于是就必定有一个 xk−xkxk−xkx_k-x_k 的项。
所以对于 i≠ki≠ki\ne k :

yi∏j=0,j≠in−1xk−xjxi−xj=0yi∏j=0,j≠in−1xk−xjxi−xj=0

y_i\prod_{j=0,j\ne i}^{n-1}\frac{x_k-x_j}{x_i-x_j}=0
得证。

四、应用

如果知道了两个变量之间的联系是多项式并知道了多项式的次数 n−1n−1n-1 ,那么可以取 nnn 个值(要取合适的值)代入多项式并求解。
如:
给定 n,k" role="presentation" style="position: relative;">n,kn,kn,k ,求:

∑i=1nik∑i=1nik

\sum_{i=1}^ni^k
n≤1018,k≤106n≤1018,k≤106n\le 10^{18},k\le 10^6 。
我们知道:

∑i=1ni0=n∑i=1ni0=n

\sum_{i=1}^ni^0=n

∑i=1ni1=n(n+1)2∑i=1ni1=n(n+1)2

\sum_{i=1}^ni^1=\frac{n(n+1)}2

∑i=1ni2=n(n+1)(2n+1)6∑i=1ni2=n(n+1)(2n+1)6

\sum_{i=1}^ni^2=\frac{n(n+1)(2n+1)}6

∑i=1ni3=(n(n+1)2)2∑i=1ni3=(n(n+1)2)2

\sum_{i=1}^ni^3=(\frac{n(n+1)}2)^2
得出结论: f(n,k)=∑ni=1ikf(n,k)=∑i=1nikf(n,k)=\sum_{i=1}^ni^k 是一个 k+1k+1k+1 次多项式。
可以取 k+2k+2k+2 个值 1,2,...,k+21,2,...,k+21,2,...,k+2 并计算出 f(1,k),f(2,k),...,f(k+2,k)f(1,k),f(2,k),...,f(k+2,k)f(1,k),f(2,k),...,f(k+2,k) 代入:

f(n,k)=∑i=1k+2f(i,k)∏j=1,j≠ik+2n−ji−jf(n,k)=∑i=1k+2f(i,k)∏j=1,j≠ik+2n−ji−j

f(n,k)=\sum_{i=1}^{k+2}f(i,k)\prod_{j=1,j\ne i}^{k+2}\frac{n-j}{i-j}
可以 O(k)O(k)O(k) 预处理出 g(i)=∏k+2j=1,j≠i{n−j}g(i)=∏j=1,j≠ik+2{n−j}g(i)=\prod_{j=1,j\ne i}^{k+2}\{n-j\} 。对 j<ij<ij 和 j>ij>ij>i 分别处理即可。
而对 ∏k+2j=1,j≠i{i−j}∏j=1,j≠ik+2{i−j}\prod_{j=1,j\ne i}^{k+2}\{i-j\} ,也可以分 j<ij<ij
和 j>ij>ij>i 分别处理:

∏j=1,j≠ik+2{i−j}=(−1)k+2−i(i−1)!(k+2−i)!∏j=1,j≠ik+2{i−j}=(−1)k+2−i(i−1)!(k+2−i)!

\prod_{j=1,j\ne i}^{k+2}\{i-j\}=(-1)^{k+2-i}(i-1)!(k+2-i)!
预处理阶乘后,复杂度就是 O(k)O(k)O(k) 的。然而由于求 f(i,k)f(i,k)f(i,k) 时要求幂,复杂度 O(klogk)O(klog⁡k)O(k\log k) 。

[学习笔记]拉格朗日插值法求多项式系数相关推荐

  1. 拉格朗日插值法求多项式系数 (附代码)

    写在前面: 学了拉格朗日插值法之后发现大家都说可以在O(n^2)时间内得到多项式系数,但是没有找到代码,网上找了很多资料又因为我太弱了没能看懂,最后在emofunx学长的帮助下终于搞明白了. 由于太弱 ...

  2. 「学习笔记」ISAP求最大流

    ISAP学习笔记 ISAP是OI中求最大流的常用方法之一.相对于Dinic,ISAP的速度提升了很多,但编码复杂度也上升了不少. 约定 采用邻接表存储图,对于每条弧,增加一条容量为0的逆向边. d数组 ...

  3. [学习笔记]拉格朗日中值定理

    其实OI中暂时没有用过? 爆切GK2018压轴题踩标算 http://www.360doc.com/content/18/0101/05/50036269_718043946.shtml 转载于:ht ...

  4. 【学习笔记】拉格朗日插值

    整理的算法模板合集: ACM模板 目录 P4781 [模板]拉格朗日插值 重心拉格朗日插值法 拉格朗日插值法求系数 自然数k次幂的和 点我看多项式全家桶(●'◡'●) P4781 [模板]拉格朗日插值 ...

  5. 拉格朗日插值法 【python】

    一.插值 设函数y=f(x)在区间[a,b]上连续,给定n+1个点 a≤x0<x1<....<xn≤b 已知,f(xk)=yk(k=0,1....n),在函数类P中寻找一个函数Φ(x ...

  6. Lawliet|C语言学习笔记4——选择结构

    C语言学习笔记--选择结构 求一元二次方程的根 简约版 #include<stdio.h> #include<math.h> //程序中要调用求平方根函数sqrt int ma ...

  7. Codeforce 622 F. The Sum of the k-th Powers(拉格朗日插值求k次幂之和,拉格朗日插值公式)

    题目大意:求 ∑i=1nik\displaystyle\sum_{i = 1}^ni^ki=1∑n​ik 求k次幂有多种求法,例如: 伯努利数求k次幂之和(待补) 斯特林数求k次幂之和 拉格朗日插值法 ...

  8. rstudio拉格朗日插值法_拉格朗日插值法学习笔记

    拉格朗日插值法是一个根据点对求回原函数的算法,原理挺好懂的. 原理和优化方法上面的大佬都讲得很好. 其实主要就是这个式子: 然后暴力算这个式子的话是每求一项f(k)的时间复杂度都是n^2. 这个时间很 ...

  9. 拉格朗日插值法学习笔记

    文章目录 STEP1 问题引入 STEP2 拉格朗日插值公式 存在性 唯一性 代码模板 STEP3 算法优化 重心拉格朗日插值 xxx连续取值的情况 STEP4 经典例题 The Sum of the ...

最新文章

  1. Centos修改系统语言
  2. 《C#精彩实例教程》小组阅读06 -- C#运算符与表达式
  3. 引入三方库_关于使用第三方库、代码复用的一些思考
  4. Java程序员3面小米,被俩算法题难倒,微软员工6分钟解决,真丢脸
  5. 网上支付、协议支付与快捷支付区别
  6. idea将maven项目打包成war包的方式,以及使用war包
  7. python中对象的概念是什么_简述Python中的面向对象编程的概念
  8. 如何用c语言编写工程文件夹,利用makefile实现c语言项目编译
  9. oracle11g导出空表
  10. bool类型数组转换成一个整数_Python如何处理数据?如何把数据转换成我们想要的?三种处理方法...
  11. 什么是sql注入_什么是Python SQL注入?又如何使用Python防止SQL注入攻击呢?
  12. 如何在CDSN打开Markdown编辑界面
  13. 从“H1N1病毒”看危机意识的重要性
  14. c语言检测u盘插入拔出,Qt检测U盘插入拔出Demo
  15. blastn 输出结果每列啥意思_本地blast的详细用法
  16. 自媒体运营抖音快手怎么快速涨粉
  17. Fairplay流程
  18. java企业开发四:ssh+JPA(hibernate实现)
  19. 国内免费(开源)CMS系统【大全】
  20. [算法竞赛入门经典] UVA 12174 - Shuffle

热门文章

  1. C语言-哈希查找(HASH)-详解(完整代码)
  2. 医疗器械行业面经——美敦力
  3. 安装goaccess出现错误
  4. DAG vs. MPP
  5. 【NLP】基于GAN的文本生成综述
  6. Linux定时任务,执行shell文件失败问题mailed 73 bytes of output but got status 0x004b#012报错解决
  7. MRI影像学习笔记(五.完结)
  8. python — 项目命名规范
  9. ToB Saas B端的业务分析框架
  10. C语言:#define详解