快速傅里叶变换(FFT)
数学——快速傅里叶变换(FFT) Shan xizeng 1. 基础知识 快速傅里叶变换,用来求出两个多项式相乘,如果暴力相乘,时间复杂度为 \(O(n^2 )\) ,使用快速傅里叶变换,可以优化到 \(O(n \log n)\) 。 准备知识: 多项式: 设 \(A(x)\) 表示一个n次多项式,则 \(A(x)=a_0x^0+a_1x^1+\cdots+a_{n-1}x^{n-1}\) 多项式的表示方法: 一是用系数表示法,表示为 \(\sum_{i=0}^{n-1}a_ix^i\) ,二是点值表示法,表示为对于几个具体的 \(x\) 对应的 \(A(x)\) 的值,最少需要 \(n\) 个不同的点就能表示唯一一个 \(n-1\) 次多项式。 多项式运算: 加法: 如果使用系数表示法,则将各个系数相加,复杂度为 \(O(n)\) ; 如果使用点值表示法,则将横坐标相同点的纵坐标相加,复杂度相同。 乘法: 如果使用系数表示法,则设得到的多项式为 \(\sum_{i=0}^nc_ix^i\) ,其中, \(c_i=\sum_{j+k=i,0\leq j,k\leq n}a_jb_k\) ,很显然,时间复杂度为 \(O(n^2)\) ; 如果使用点值表示法,则将横坐标相同点的纵坐标相乘,复杂度仍不变,为 \(O(n)\) 。 向量: 物理、几何学意义:同时具有大小和方向的量