首页 > 编程语言 >多项式相关算法学习笔记(持续更新)

多项式相关算法学习笔记(持续更新)

时间:2023-02-17 11:58:08浏览次数:63  
标签:多项式 sum 相乘 笔记 算法 傅里叶 kx omega

第一次用博客园写学习笔记,写的不好请见谅~

欢迎各位OIer在评论区说一下自己对这篇博客的建议!

有关多项式的基本概念

对于求和式 \(\sum a_nx^n\) ,如果是有限项相加,称为多项式,记作 \(f(x)=\sum_{k=0}^n a_kx^k\)。

一个多项式的度(也称次数)就是这个多项式最高次项的次数,记作 \(\deg f\) 。

多项式的导数具有以下公式:

\[\left(\sum_{k=0}^{+\infty}a_kx^k\right)'=\sum_{k=1}^{+\infty}ka_kx^{k-1} \]

定义加法和乘法以后,多项式的基本运算和整数基本一致。

多项式的表示一般有两种方法:

  1. 系数表示,就是形如 \(f(x)=\sum_{k=0}^n a_kx^k\) 的形式。
  2. 点值表示,即给出 \(n+1\) 个点 \((x_{0}, y_{0}), (x_{1}, y_{1}), \dots, (x_{n}, y_{n})\) ,求一个 \(n\) 次多项式使得这 \(n+1\) 个点都在 \(f(x)\) 上。

快速傅里叶变换(FFT)

一种快速多项式乘法的方法。

单位根

前置知识:复数

顾名思义,单位根就是满足 \(x^n=1\) 的根。

众所周知,在复数域内, \(n\) 次多项式有 \(n\) 个根,因此 \(x^n=1\) 也有 \(n\) 个根,一般把第 \(k\) 个根记作 \(\omega_n^k\) 。

由于复数乘法的几何意义是模长相乘,辐角相加,因此 \(\omega_n^k\) 的模长一定为 \(1\) ,辐角为 \(\frac{2\pi}{n}\) 的倍数。

为方便,我们设 \(\omega_n^k\) 的辐角为 \(\frac{2k\pi}{n}\) ,或者 \(\frac{360^\circ k}{n}\) 。

单位根有三个重要的性质。对于任意正整数 n 和整数 k:

\[\begin{aligned} \omega_n^n&=1\\ \omega_n^k&=\omega_{xn}^{xk}\\ \omega_{2n}^{k+n}&=-\omega_{2n}^k\\ \end{aligned} \]

这三个性质在快速傅里叶变换中会得到应用。

DFT

又称离散傅里叶变换、Discrete Fourier Transform。

DFT的思想是将两个多项式的系数表示与点值表示互相转化。

因为多项式的系数表示直接相乘是 \(O(n^2)\) 的,而点值表示相乘是 \(O(n)\) 的。(只需要把每个点处的值相乘)

先考虑将系数表示转化为点值。

如果暴力去求,时间复杂度还是 \(O(n^2)\) 的。

那这个时候我们就要用到一个东西叫做:

FFT

又称快速傅里叶变换、Fast (Discrete) Fourier Transform。

开个坑,以后再写。

标签:多项式,sum,相乘,笔记,算法,傅里叶,kx,omega
From: https://www.cnblogs.com/SqrtSecond/p/17129409.html

相关文章