首页 > 其他分享 >多项式基础内容小记

多项式基础内容小记

时间:2024-07-30 20:43:00浏览次数:11  
标签:系数 int 多项式 ne 表示法 插值 内容 小记

0. 基础知识:

关于多项式的定义:

  • 多项式:一个形如 \(f(x) = \sum_{i = 0} ^n a_i x^i\) 的有限和式被称为多项式。

  • 系数:多项式第 \(i\) 项的系数在上面就表示为 \(a_i\)。

  • 度(次数):多项式中最高次数的项的次数就被称为该多项式的度,也称次数。

多项式表示法:

多项式有两种表示法:分别是 系数表示法点值表示法。其中系数表示法就形如上面给出的形式。

而点值表示法则是用不同的 \(n + 1\) 个点来表示一个 \(n\) 次多项式。其中 两点确定一条直线 就是一个很好的例子。如何快速的在两者中快速转化呢?这是我们要研究的问题。其中从点值表示法到系数表示法的过程叫插值,从系数表示法到点值表示法的过程叫求值。

1.拉格朗日插值:

接下来先研究一下如何快速插值。首先一个简单的想法是直接列出 \(n + 1\) 条方程式并使用高斯消元,但这样是 \(O(n^3)\) 的,能不能更快呢?

我们尝试换一种多项式的表现方式:考虑给每个 \(y_i\) 前面都加上一个系数 \(k_i\) 并求和,并当 \(x = x_i\) 时该 \(k_i\) 取到 \(1\),对于其他的情况取到 \(0\)。但这样还是比较困难的,注意到我们只关心该多项式的表达式在这 \(n + 1\) 的表现,于是考虑将 \(k_i\) 的定义变为:当 \(x\) 为任意 \(x_j(j \ne i)\) 时,\(k_i\) 取到 \(0\),其他情况取到 \(1\)。形式化的:令 \(f(x) = \sum_{i = 1} ^ {n + 1} k_iy_i\),其中 \(k_i = [\forall j(1 \le j \le n + 1, j \ne i), x \ne x_j]\)。

于是我们只需要构造出合适的 \(k_i\) 满足上述条件即可,显然 \(\prod_{j \ne i} (x - x_j)\) 会在 \(x\) 取到任意 \(x_j, j \ne i\) 时取到 \(0\),但是当 \(x = x_i\) 时,该式子不是 \(1\),那就把多出来的除掉即可。于是得到 \(k_i = \prod_{j \ne i} \frac{x-x_j}{x_i-x_j}\)。于是 \(f(x) = \sum_{i = 1}^{n + 1}y_i \prod_{j \ne i} \frac{x-x_j}{x_i-x_j}\)。算法时间复杂度降到了 \(O(n^2)\),这便是拉格朗日插值。

P4781 【模板】拉格朗日插值

qwq
#include<bits/stdc++.h>
#define int long long
#define inv(x) qpow(x, mod - 2)
using namespace std;

const int N = 2e3 + 10, mod = 998244353;

int n, k, ans;
struct point{
	int x, y;
}p[N];

int qpow(int x, int y){
	int ret = 1;
	for(; y; y >>= 1, x = x * x % mod) if(y & 1) ret = ret * x % mod;
	return ret;
}

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin >> n >> k;
	for(int i = 1; i <= n; i++) cin >> p[i].x >> p[i].y;
	for(int i = 1; i <= n; i++){
		int sum1 = p[i].y, sum2 = 1;
		for(int j = 1; j <= n; j++){
			if(i == j) continue;
			sum1 = (sum1 * ((k - p[j].x + mod)) % mod) % mod;
			sum2 = (sum2 * ((p[i].x - p[j].x + mod) % mod)) % mod;
		}
		ans = (ans + sum1 * inv(sum2) % mod) % mod;		
	}
	cout << ans;

	// system("pause");
	return 0;
}

标签:系数,int,多项式,ne,表示法,插值,内容,小记
From: https://www.cnblogs.com/little-corn/p/18332661

相关文章

  • 正则表达式小记
    转义字符在正则表达式中,某些字符具有特殊的含义,它们被称为元字符或特殊字符。当你希望这些特殊字符按照字面意义匹配文本时,就需要使用转义字符(通常是反斜杠\)来“取消”它们的特殊含义。以下是正则表达式中需要转义的常见特殊字符:反斜杠用于转义其他特殊字符或创建预定义字符......
  • AI技术如何革新内容生产的效率与质量
    AI技术如何革新内容生产的效率与质量在数字化时代,内容生产已成为各行各业不可或缺的一环。然而,随着信息量的爆炸式增长,如何高效、优质地生产内容成为了一个亟待解决的问题。近年来,AI技术的迅猛发展为我们提供了新的解决方案。本文将探讨如何通过AI技术提升内容生产的效率和......
  • 面向对象内容(一)
    主要记录一下面向对象的内容,讲讲静态关键字和继承一.静态面向对象编程中很常见的一个关键字static.static读作静态,可以用来修饰成员变量,也能修饰成员方法。我们先来学习static修饰成员变量。1.1static修饰成员变量 Java中的成员变量按照有无static修饰分为两种:类变量、......
  • 小一保姆级 python三大核心多态、抽象类、动态添加内容详解
    一.多态多态是面向对象编程中的一个核心概念,它允许一个接口被多个数据类型实现。这意味着,即使多个类具有不同的内部实现,它们也可以共享一个公共接口。多态的实现通常依赖于继承和方法重写。继承:子类继承父类的属性和方法。方法重写:子类重写父类中的方法,以提供特定的实现。......
  • js vue3 vue2鼠标单击事件复制指定内容到粘贴板
    借助原生JavaScript的 navigator.clipboard.writeText() 方法来时(要求页面是在用户交互的上下文中,比如点击事件处理程序中调用)如:点击列表的复制按钮,得到指定列(data)的值到粘贴板<template><div><button@click="click">复制文本</button></div></templ......
  • IPA多项式承诺方案--(2)预备知识
    基于内积定理(InnerProductArgument)实现的多项式承诺方案,为了方便,简称为IPA多项式承诺方案。在阅读承诺方案前,需要掌握Pedersen承诺、内积和Σ\SigmaΣ协议相关知识,Peder......
  • Django 页面不显示任何内容
    我的“新闻”页面无法正常工作,它正在数据库中保存信息,但不显示任何内容。这里是HTML:{%extends'base.html'%}{%blockcontent%}<h1class='product'>News</h1>{%foriteminnew%}<div><br><strong><ahref='/news/{{item.......
  • 【机器学习】必会核函数之:多项式核函数
    多项式核函数1、引言2、多项式核函数2.1定义2.2核心原理2.3实现步骤2.4应用场景2.5代码示例3、总结1、引言多项式核函数(PolynomialKernel)是一种用于机器学习,尤其是支持向量机(SVM)中的核函数。它通过计算输入数据的多项式变换,映射到一个更高维度的特征......
  • 如何利用CDN和PCDN的结合提高内容分发效率?
    利用CDN和PCDN的结合提高内容分发效率可以通过以下几个方面来实现:1.协同缓存和分发CDN和PCDN可以结合使用,共同构建一个分布式的缓存和分发网络。CDN负责在边缘服务器上缓存热门内容,确保内容的快速响应和访问。而PCDN则利用用户设备之间的P2P连接进行内容的进一步分发和传输......
  • 文字游侠:一款高效创作的AI模型神器,让你的内容生产力翻倍!
    在这个数字化的时代,内容创作成为了许多人的日常。无论是自媒体博主、营销人员还是企业宣传团队,都在寻找能够提高工作效率、保证内容质量的工具。在这个背景下,“文字游侠”应运而生,它是一款基于先进的人工智能技术开发的文字创作辅助软件,旨在帮助用户快速生成高质量的原创内容......