2025-11-20 05:22:03
FFT算法快的主要原因就是分治法儿,把大问题拆成小问题再合并。比如处理1000个数据点,传统方法要算百万次,FFT只要十万次就完事儿了。这就像切西瓜,直接啃整个西瓜费劲,切成小块再一块块吃,省力多了。
FFT快就快在把序列拆成前后两半儿,先算完每半儿的FFT,再合并结果。比如算8个点的FFT,先算前4和后4的FFT,再通过蝶形运算把两个结果拼成8点的FFT。每拆一级就能省一半计算量,总共拆log₂N级。拿N=1024来说,传统DFT要算1024²=1,048,576次复数乘法和655,360次加法,FFT只要1024×10=10,240次复数乘法和5,120次加法。数据复用特性也让内存访问更高效,比如算完前半儿结果还能直接套用后半儿计算。不过这得靠二进制分治,要是点数不是2的整数次幂,就得补零凑数,这时候反而比普通FFT慢点。合并结果的时候,还要注意旋转因子的复数乘法,这部分虽然省了计算,但得提前算好旋转因子表,像查字典一样方便查找。
本题链接: