
- 快速傅立叶变换用于优化多项式乘法.
多项式
- 一个以 多项式定义在一个代数域
为变量的
上,将多项式
表示为形式和:
- 系数,若一个多项式最高次非零的系数为
称为多项式的
,则称
次数是的
,记作
次数界. 可以发现其实一个次数界为. 并称任何一个严格大于多项式次数的整数为该多项式的
的多项式可以由一个向量
系数表达.表示,称此为多项式的
- 对于两个多项式(
)的乘法:
其中,
- 点值表达:利用线性代数知识可以知道,一个次数界为
的多项式可以由
个点值对组成的集合表示:
其中,
DFT及其逆
- 可以发现,虽然利用系数表达进行多项式乘法的时间复杂度为
,但是由于
的次数界为
,所以多项式点值的乘法其实是
的. 于是优化的方向在:能否快速的把系数表达转化成点值表达(求值),并将计算好的
的点值快速转化为系数表达(插值).
复数
- 我们知道满足
的复数有
个,并称
为单位复数根,此外我们还将
主称为
,其他所有单位根均为其幂次,也就是可以将他们全部表示为:次单位根
其中,
- 消去引理:对任何整数
,以及
,均有
- 折半引理:如果
为偶数,那么
个
次单位根的平方的集合恰好是
个
次单位根的集合.(在此我们假设
是
的幂次.)
由于,且
即证.
- 求和引理:对于
,均有
DFT
- 可以发现点值表示时的点其实是可以任意选取的,我们希望通过选取合适的点来加速这一过程.
- 观察多项式
,如果将奇偶项分别提取出来:
这么一来可以发现
这样以来就有
我们惊奇地发现这里的
由此实现快速傅立叶变换(FFT).
逆DFT
- 利用线性代数矩阵求逆可以知道:
注意到
所以我们只需要用
由此实现逆FFT.
其他
- 解决了
的情况,对于任意的正整数
,只需要高位补零使其成为次数为
的多项式即可.
- 优化:利用蝴蝶操作将递归过程改为自底向上迭代过程.
- 注意到原根也有单位复数根的性质,由此产生快速数论变换(NTT).