前提:这里是从数学和算法的角度理解FFT,不涉及信号处理背景知识
问题描述:多项式相乘求解目的得到相乘多项式的系数,直接相乘暴力求解的时间复杂度为O(n2),(a0b0,...,a0bn),...,(anb0,...,anbn)
图片转载自快速傅里叶变换(FFT, Fast Fourier Transform) - 知乎
最后fft求解的复杂度为O(nlogn)+O(n)+O(nlogn)=O(nlogn)
离散傅里叶变换(DFT) 是来计算多项式在n个特殊点(单位根)的值。而 快速傅里叶变换(FFT) 是一种快速有效率的对DFT的实现。FFT 加速多项式乘法,其基本思想是将两个多项式的系数表示通过 FFT 转化为特殊点处的点值表示,然后计算两个多项式点值表示的乘积得到原多项式卷积的点值表示,再将多项式卷积的点值表示进行 逆离散傅里叶变换(IDFT) 就得到了乘积多项式的系数表示。
已知系数表达式求点值表达式
这里n是2的整数幂,不够要补零。
核心:就是我①式计算前面2/n部分的结果可以保留下来用于计算后面2/n部分②式的计算,这样的话就可以把每个区间每一次进行等分成两份,就可以分成logn次,每次需要计算n次(比如A1(x)公式你看里面最大那一项是),最后时间复杂度就是,这样我们就在时间内得到了点值表达式
这样就可以每计算一个值需要递归logn层,计算n个值所以在
时间内得到了点值表达式
Reference
十分简明易懂的FFT(快速傅里叶变换)_路人黑的纸巾的博客-CSDN博客_fft //细节补充
快速傅里叶变换(FFT)求解多项式乘法 - 知乎//整体思想的把握讲的很好,整个框架逻辑搭好了,就是一些细节没有完善如,fft蝶形计算方式没有讲述
FFT(傅里叶快速变换,详细讲解+推导) 每日一遍,算法再见!_鲜果维他命的博客-CSDN博客_fft
//细节基础知识解释的很好,有些算法部分能够让你豁然开朗,就是一些细节没有完善如,fft蝶形计算方式没有讲述
=======================================================================