本文将简单推导两种方式进行的离散傅里叶变换,用另种视角解释并优化算法。参考了 Seniorious yhx-12243 的 NTT 到底写了些什么(详细揭秘) 一文、OI Wiki 快速傅里叶变换 条目 和 rushcheyo 转置原理及其应用 讲稿。
离散傅里叶变换
我们计算数列 {an} 的离散傅里叶变换
DFT(a,n)k=j=0∑n−1ajen−2πikj
由卷积定理和循环卷积得到,我们对同样长为 n 的数列 {bn} 作 DFT,并令数列 ck=DFT(a,n)kDFT(b,n)k,则有
IDFT(c,n)k=j+q≡k(modn)∑ajbq
于是我们可以利用该原理实现常规意义下的数列卷积:有长为 n 的数列 {an},长 m 的数列 {bm},则将 a,b 高位补 0,分别作 n+m−1 位的 DFT,点值相乘后 IDFT 即可得到 ck=∑i+j≡k(modn+m−1)aibj=∑i+j=k0≤i<n0≤j<maibj。
为行文方便,下文采用 DFT(a,n)k=∑i=0n−1aiωnik 的定义,其中 ωn=exp(2πi/n),即 n 阶单位根。 (更多…)
More