tilte : 快速傅里叶变换FFT学习笔记
tags : ACM,数论
date : 2021-7-18
简介
FFT(Fast Fourier Transformation),中文名快速傅里叶变换,用来加速多项式乘法。
DFT,中文名离散傅里叶变换,用来把多项式转化成离散的点。
IDFT,中文名离散傅里叶反变换,用来把离散的点还原成多项式。
时间复杂度O(nlogn)
将一个用系数表示的多项式转换成它的点值表示的算法。
系数表示法:
f(x)={ a0,a1,a2,...,an−1}f(x)=\{a_0,a_1,a_2,...,a_{n-1}\}f(x)={ a0,a1,a2,...,an−1}
点值表示法:
f(x)={ (x0,f(x0)),(x1,f(x1)),...,(xn−1,f(xn−1))}f(x)=\{(x_0,f(x_0)),(x_1,f(x1)),...,(x_{n-1},f(x_n-1))\}f(x)={ (x0,f(x0)),(x1,f(x1)),...,(xn−1,f(xn−1))}
高精度乘法下,系数表示法将多项式相乘需要时间复杂度O(n2)O(n^2)O(n2)
而点值表示法只需要O(n)O(n)O(n)
原因:
设两个点值多项式分别为f(x)={ (x0,f(x0)),(x1,f(x1)),...,(xn−1,f(xn−1))}g(x)={ (x0,g(x0)),(x1,g(x1)),...,(xn−1,g(xn−1))}设题目他们的乘积是h(x),那么h(x)={ (x0,f(x0)⋅g(x0)),(x1,f(x1)⋅g(x1)),...,(xn−1,f(xn−1)⋅g(xn−1))} 设两个点值多项式分别为\\ f(x)=\{(x_0,f(x_0)),(x_1,f(x1)),...,(x_{n-1},f(x_{n-1}))\}\\ g(x)=\{(x_0,g(x_0)),(x_1,g(x1)),...,(x_{n-1},g(x_{n-1}))\}\\ 设题目他们的乘积是h(x),那么\\ h(x)=\{(x_0,f(x_0)·g(x_0)),(x_1,f(x_1)·g(x1)),...,(x_{n-1},f(x_{n-1})·g(x_{n-1}))\}\\ 设两个点值多项式分别为f(x)={ (x0,f(x0)),(x1,f(x1)),...,(xn−1,f(xn−1))}g(x)={ (x0,g(x0)),(x1,g(x1)),...,(xn−1,g(xn−1))}设题目他们的乘积是h(x),那么h(x)={ (x0,f(x0)⋅g(x0)),(x1,f(x1)⋅g(x1)),...,(xn−1,f(xn−1)⋅g(xn−</