tilte : 快速傅里叶变换FFT学习笔记
tags : ACM,数论
date : 2021-7-18
简介
FFT(Fast Fourier Transformation),中文名快速傅里叶变换,用来加速多项式乘法。
DFT,中文名离散傅里叶变换,用来把多项式转化成离散的点。
IDFT,中文名离散傅里叶反变换,用来把离散的点还原成多项式。
时间复杂度O(nlogn)
将一个用系数表示的多项式转换成它的点值表示的算法。
系数表示法:
f ( x ) = { a 0 , a 1 , a 2 , . . . , a n − 1 } f(x)=\{a_0,a_1,a_2,...,a_{n-1}\} f(x)={ a0,a1,a2,...,an−1}
点值表示法:
f ( x ) = { ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) , . . . , ( x n − 1 , f ( x n − 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 ( n 2 ) O(n^2) O(n2)
而点值表示法只需要 O ( n ) O(n) O(n)
原因:
设 两 个 点 值 多 项 式 分 别 为 f ( x ) = { ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) , . . . , ( x n − 1 , f ( x n − 1 ) ) } g ( x ) = { ( x 0 , g ( x 0 ) ) , ( x 1 , g ( x 1 ) ) , . . . , ( 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 ( x 1 ) ) , . . . , ( x n − 1 , f ( x n − 1 ) ⋅ g ( x n − 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)),<