利用FFT和逆FFT求多项式乘法 的原理:
2013-11-25 21:01
295 查看
利用FFT和逆FFT求多项式乘法 的原理:
假设是N次和M次多项式的乘法,
首先明白为什么要用FFT方法,因为一个字,快。N越大,快得越离谱。
然后是过程,三步走:
1.由系数来求点值(求值) 2.代入点值计算总体Y. 3.由点值计算系数(插值)
其实步骤1的点值可以任意取,只要取够了n+m次,就可以表示了,不过,任意取的代价就是步骤3基本没法求(除非你用什么matlab工具或者什么拟合算法)。步骤3会非常慢以至于失去意义。
于是,FFT成功上位。一堆又一堆的数学公式出现了,首先登场的是单位复根这个家伙。
点值选取了它,就可以大大简化运算了(由于它的种种变态属性)。
我们用分治法将N次多项式搞成两个多项式,A(x) = A1(x*x) + xA2(x*x)
选取n个n次单位复根的平方作为点值,由于定理:
若n>0且n是偶数,n个n次单位复根的平方等于n/2个n/2次单位复根。(折半定理)证明不难,主要是从w本身的值的特性入手。
于是问题规模从n转换为n/2。递归一下,解法最后会变成加法或者减法如此easy的东西。
通过以上便完成了步骤1和2,3怎么办?逆FFT登场。
矩阵积 y = V a,V是关于x的范德蒙德矩阵。为什么这个会很巧妙地成立,我也不知道。
现在,考虑 a = V^-1*y,得到了 a = 1/n sum(0-n-1){y*w^-kj}. 然后,世界就很简单地去运行了。
那它不过就是求一个逆矩阵而已吗?和逆FFT有神马关系?
这个式子的形式很不好意思,名字就是逆FFT。。。
假设是N次和M次多项式的乘法,
首先明白为什么要用FFT方法,因为一个字,快。N越大,快得越离谱。
然后是过程,三步走:
1.由系数来求点值(求值) 2.代入点值计算总体Y. 3.由点值计算系数(插值)
其实步骤1的点值可以任意取,只要取够了n+m次,就可以表示了,不过,任意取的代价就是步骤3基本没法求(除非你用什么matlab工具或者什么拟合算法)。步骤3会非常慢以至于失去意义。
于是,FFT成功上位。一堆又一堆的数学公式出现了,首先登场的是单位复根这个家伙。
点值选取了它,就可以大大简化运算了(由于它的种种变态属性)。
我们用分治法将N次多项式搞成两个多项式,A(x) = A1(x*x) + xA2(x*x)
选取n个n次单位复根的平方作为点值,由于定理:
若n>0且n是偶数,n个n次单位复根的平方等于n/2个n/2次单位复根。(折半定理)证明不难,主要是从w本身的值的特性入手。
于是问题规模从n转换为n/2。递归一下,解法最后会变成加法或者减法如此easy的东西。
通过以上便完成了步骤1和2,3怎么办?逆FFT登场。
矩阵积 y = V a,V是关于x的范德蒙德矩阵。为什么这个会很巧妙地成立,我也不知道。
现在,考虑 a = V^-1*y,得到了 a = 1/n sum(0-n-1){y*w^-kj}. 然后,世界就很简单地去运行了。
那它不过就是求一个逆矩阵而已吗?和逆FFT有神马关系?
这个式子的形式很不好意思,名字就是逆FFT。。。
相关文章推荐
- [笔记]ACM笔记 - 利用FFT求卷积(求多项式乘法)
- 多项式相乘快速算法原理及相应C代码实现---用到fft
- FFT与多项式乘法
- [省选前题目整理][UOJ 34]多项式乘法(FFT)
- 洛谷P3803 【模板】多项式乘法(FFT和NTT)
- 【模版】多项式乘法 FFT
- UOJ34 多项式乘法 fft板子
- 洛谷P3803 【模板】多项式乘法(FFT)
- FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
- FFT多项式乘法学习笔记
- FFT uoj34 多项式乘法
- 【UOJ#34】 多项式乘法(FFT && NTT)
- 多项式乘法,FFT与NTT
- 【FFT优化】[UOJ#34]多项式乘法
- 【Uoj34】多项式乘法(NTT,FFT)
- 【Uoj34】多项式乘法(NTT,FFT)
- [UOJ#34]多项式乘法(FFT)
- 【Luogu3808】多项式乘法FFT
- [uoj 34 多项式乘法] FFT&NTT 模板
- [UOJ34]多项式乘法(快速傅立叶变换FFT)