拉格朗日插值

拉格朗日插值#

基本介绍#

  • 对于一个 n 次多项式 f(x)=i=0nfixi,给出其 n+1 个位置上的值,即 1in+1,f(xi)=yi,你需要对于给定的 X,求出 f(X) 的值。

仿照中国剩余定理,构造 gi(x) 使得 gi(xj)=[i=j],具体构造为 gi(x)=jixxjxixj

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

x=xi 时,所有分子分母都相同,gi(x)=1

x=xj(ij) 时,一定存在一项分子为 0 ,故gi(x)=0

那么 f(x)=i=1n+1yigi(x)

暴力带入计算的复杂度为 Θ(n2)

P4781 【模板】拉格朗日插值#

特殊情况#

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

gi(x)=jixjij=j=1i1xjijj=i+1n+1xjij=1(i1)!j=1i1(xj)(1)n+1i(n+1i)!j=i+1n+1(xj)

O(n),预处理 (xj) 的阶乘,阶乘逆元,前缀积和后缀积,就可以做到 Θ(1) 查询 gi(X)了。

总复杂度 Θ(n)

CF622F The Sum of the k-th Powers#

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

复杂度 Θ(k)

CF1817C#

优化 DP#

CF995F Cowmpany Cowmpensation#

暴力 dpO(nD) 的,要优化。

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

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

复杂度 Θ(n2)

P4463 [集训队互测 2012] calc#

思路差不多。

分段插值#

[APIO2016] 划艇#

优化暴力 dp,把每一段拿出来跑插值即可。

[省选联考 2022] 填树#

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

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

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

复杂度 Θ(n3)

[NOI2019] 机器人#

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

P10008 [集训队互测 2022] Range Minimum Element#

更进一步#

如果我们不只满足于求 f(X),而是想要求出 f0,f1fn,怎么办?

暴力是 O(n3) 的。

考虑先 O(n2)求出 F(x)=i=1n(xxi),然后每次就是要查询 F(x)(xxi),短除法就行。

复杂度 O(n2)

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

对于多项式 F(x),G(x),如果我们求出 f(i)=jFjij,g(i)=jGjij,那么 (f×g)(i)=f(i)g(i),然后再插值还原出系数就行。

当然这样还是 O(n2) 看起来没啥用。

但是如果我们要计算多项式 F1×F2×Fm,每个多项式次数为 n,那么暴力卷积复杂度是 O(mn2),而该做法就可以做到 O(nm)

CF1874E Jellyfish and Hack#

暴力 dpO(n6) 的,瓶颈在于卷积,我们带入一些点值,然后把 dp 值看做多项式的系数,这样中间的所有卷积都转化为了点值的乘法,这样复杂度 Θ(n4)

CF917D Stranger Trees#

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

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

复杂度 O(n4)

[省选联考 2024] 重塑时光#

posted @   Larunatrecy  阅读(108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
主题色彩