最近算法课上老师分配我们负责讲解快速傅里叶变换,以下是个人学习后的理解:
快速傅里叶变换(FFT)(《算法导论》第30章 P527~P539)
快速傅里叶变换(Fast Fourier Transform)是离散傅里叶变换(Discrete Fourier Transform,DFT)的快速算法,它更多的应用于数字信号处理,本人专业cs所以本文更多描述其在算法上应用(大数乘法,多项式乘法),同时主要从为why,what,how来描述。
1. 为什么引入FFT(why)
计算多项式乘法、或者大数乘法时,我们很容易就可以想到一个时间复杂度o()(逐项相乘)的算法,其次如果利用分治的思想对这个算法进行优化,我们可以将时间复杂度优化到o()(ps:本文若无特殊说明所有lg默认以2为底),若想继续对时间复杂读进行优化,我们引入信号中的fft对算法进行优化。
2. 什么是FFT(what)
在了解FFT之前,我们需要先了解几个补充知识:
2.1 预备知识
2.1.1 n次单位复根
n次单位复根从名称上来看它显然是一个方程的复数根,它是满足=1的方程的根,解这个方程可以得到n个复数(对方程开n次方)根据方程的几何意义,我们可以在坐标轴上画一个以原点为圆心的半径为1的单位圆,n个点根都对称分布在圆周上。例如图一(8次)
2.1.2 消去引理
2.1.2 求和引理
2.1.3 折半引理
2.2 离散傅里叶(DFT)
从这个定义式来看, 我们计算出一个多项式 A(x) 的离散傅里叶变换依然需要 O() 的时间复杂度,因此我们需要想办法降低时间复杂度。
2.3 快速傅里叶变换(FFT)
FFT使用的是分治策略。根据系数下标的奇偶来拆分子问题, 将这些系数分配到两个次数界为 n/2 的多项式(便于分治这里多项式最高次n采用2的整数幂,非2整数幂的n次多项式算法最简单办法:对序列补零处理使之成为2的次幂)