• 拉格朗日插值复习笔记


    拉格朗日插值法基于这个事实:(n)个点可以唯一确定一个(n-1)次多项式。

    拉格朗日插值法

    (f(x))是个(n)次多项式

    [f(x_0)=sum_{i=0}^{n}y_iprod_{j ot = i}frac {x_0-x_j} {x_i-x_j} ]

    可以发现对于所给的点都可以利用该多项式正确地求出(考虑(prod_{j ot =i}frac {x_0-x_j} {x_i-x_j})这个式子,(x_0=x_i)时,其值恰好为(1),然后对于(x_0 ot = x_i)时,其值恰好为(0)
    复杂度是(O(n^2))的。

    代码如下,题目为LGOJP4781 【模板】拉格朗日插值

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    typedef long long ll;
    const int N = 2010;
    const int mod = 998244353;
    
    int n, k;
    int a[N], b[N];
    
    int power(int a, int b) {
    	int ans = 1;
    	while(b) {
    		if(b & 1) ans = 1ll * ans * a % mod;
    		a = 1ll * a * a % mod; b >>= 1;
    	}
    	return ans; 
    }
    
    int main() {
    	scanf("%d%d", &n, &k);
    	for(int i = 1; i <= n; ++i) {
    		scanf("%d%d", &a[i], &b[i]);
    	}
    	int ans = 0;
    	for(int i = 1; i <= n; ++i) {
    		int sum = 1, inv = 1;
    		for(int j = 1; j <= n; ++j) {
    			if(i == j) continue;
    			(sum = 1ll * sum * (k - a[j] + mod) % mod); 
    			(inv = 1ll * inv * (a[i] - a[j] + mod) % mod) %= mod;
    		}
    		ans = (1ll * ans + 1ll * sum * b[i] % mod * power(inv, mod - 2) % mod) % mod;
    	}
    	printf("%d
    ", (ans % mod + mod) % mod);
    	return 0;
    }
    

    取值连续时的拉格朗日插值法

    因为只需要任意(n+1)个不同点就可以确定一个(n)次多项式,所以很多时候为了方便取的任意(n+1)个点其实是连续的(1,2,3,...,n+1)
    那么令(x_i=i),上述式子可以写成

    [f(x_0)=sum_{i=0}^{n}y_iprod_{j ot = i}frac {x_0-j} {i-j} ]

    (prod_{j ot = i}frac {x_0-j} {i-j}=frac {prod_{j<i} x_0-jprod_{j>i}x_0 - j} {i!(n-i)!})
    那么预先维护出关于(x_0)的前缀积(pre)和后缀积(suf),原式即可化为

    [f(x_0)=sum_{i=0}^{n}y_i frac {pre[i-1] imes suf[i+1]} {i!(n-i)!} ]

    于是复杂度降为(O(nlog n)),瓶颈在逆元,可以利用逆元的线性求法做到(O(n))

    应用:自然数幂和

    求$$sum_{i=1}^n i^k$$
    (1le nle 10^9, 1le k le 10^6)
    (sum i^k)是一个(k+1)次多项式。所以拉格朗日插值插出这个多项式,然后代入(n)即可。

  • 相关阅读:
    android开发之gridlayout使用入门
    android开发之merge结合include优化布局
    android开发布局优化之ViewStub
    FindBug:Call to static DateFormat
    SimpleDateFormat的使用问题
    某P2P开发商ERP系统核心业务介绍
    某P2P开发商ERP系统核心业务介绍
    xtu字符串 C. Marlon's String
    学渣乱搞系列之扩展KMP的那点事
    xtu字符串 D. 病毒侵袭
  • 原文地址:https://www.cnblogs.com/henry-1202/p/11862562.html
Copyright © 2020-2023  润新知