快速傅里叶变换 (Fast Fourier Transform, 简称 FFT) 是离散傅里叶变换 (DFT) 的一种快速、高效的算法。它由 J.W. Cooley 和 T.W. Tukey 在 1965 年提出。
在处理多项式乘法(或卷积)时,朴素的高精度乘法需要 的时间复杂度。而 FFT 巧妙地利用了离散傅氏变换的奇偶、虚实等特性,能将时间复杂度大幅优化至。被变换的抽样点数 越多,FFT 算法计算量的节省就越显著。
一、 多项式的两种表示法
FFT 的核心思想是:用 的时间将一个用系数表示的多项式转换成它的点值表示,完成乘法后再转换回来。
1.1 系数表示法
一个 次 项多项式 可以表示为:
也可以直接用每一项的系数集合来表示:
1.2 点值表示法
如果把多项式放到平面直角坐标系里面看成一个函数,代入 个不同的,会得出 个不同的。
这 个点可以唯一确定该多项式(即有且仅有一个 次多项式满足,相当于解 元一次方程组)。因此, 还可以表示为:
这就是点值表示法。

1.3 乘法复杂度的区别
系数表示法: 若将多项式 和 相乘,需要枚举 每一位的系数与 每一位的系数相乘,时间复杂度为。
点值表示法: 若两者的点值表示在相同的 处取值,它们相乘后的多项式 的点值只需将对应的纵坐标直接相乘:
这个过程只需要枚举一次,时间复杂度仅为。
概念明确: 朴素的系数转点值的算法叫 DFT(离散傅里叶变换),点值转系数叫 IDFT(离散傅里叶逆变换)。
二、 前置知识:复数与单位根
2.1 复数基础
我们把形如()的数称为复数,其中 为实部, 为虚部, 为虚数单位。
定义,引入复数后就可以表示负数的平方根,如。
复平面: 复数可以看作复平面直角坐标系上的一个点 或代表它的向量。
模长: 复数 到原点的距离,记为。
共轭复数: 的共轭复数为(即虚部取反)。

2.2 复数的运算性质
加法:(满足向量的平行四边形法则)。
乘法:。
乘法的几何意义(极其重要): 模长相乘,极角相加。
复数相加也满足平行四边形法则即 A B + A D = A C
复数相乘还有一个值得注意的小性质: 模长相乘,极角相加



三、 DFT 与 FFT 核心解析
(注:从这里开始,所有的项数 都默认为 的整数次幂)
3.1 离散傅里叶变换 (DFT) 与 单位根
任意取 个 值代入计算多项式,暴力计算 依然需要 的时间。
傅里叶提出,代入单位圆上的等分点可以极大简化运算。以半径为 的单位圆为例,将其 等分,从 开始逆时针标号。第 个点代表的复数称为 次单位根,记为:

结合欧拉公式(特例: ),单位根具有以下优秀性质,这也是推导 FFT 分治的基础:
折半引理: (两者表示的复数点相同)。
对称引理: (在单位圆上关于原点对称)。
周期性:。
3.2 快速傅里叶变换 (FFT) 的分治思想
DFT 仍然是暴力的,但通过单位根的性质,我们可以利用分治对其进行优化。
设多项式。
按 下标的奇偶性将其分成两半,并在奇数部分提一个 出来:
设两个新多项式:
则有原多项式重组公式:
将 ( ) 代入上式:
利用对称引理,将另一半 代入:
核心结论:
计算 和 时,公式的后半段只有符号不同!
这意味着,在分治回溯时,我们只要知道前一半序列 和 的值,就可以直接算出后一半序列的答案。
每次递归一分为二,当 时只有一个常数项直接 return。这成功将时间复杂度降到了。
3.3 快速傅里叶逆变换 (IFFT)
计算完卷积后,我们需要将点值表示的多项式转回系数表示。
如果用普通的 IDFT 暴力解依然是。如何使用 FFT 的框架在 内解决?
数学推导表明: 将多项式在分治的过程中,乘上的单位根全部替换为其共轭复数 进行同样的 FFT 操作。分治完成后,将得到的每一项结果除以,即为原多项式的每一项系数。