[FFT]快速傅里叶变换
来源:互联网 发布:机房网络静电地板 编辑:程序博客网 时间:2024/04/28 09:59
引入
首先,FFT是快速傅里叶变换的简称。傅里叶变换是一个数学中使用的对函数的变换,而离散傅里叶变换顾名思义就是对于离散点的傅里叶变换。
那么,在OI中,傅里叶变换的最大意义,就在于加速向量卷积,即多项式乘法。
多项式乘法
系数表示法
现有两个多项式
我们这样定义它们的乘法
计算它们的乘法,朴素的做法需要
我们将上述
点值表示法
现在来考虑另一种方法:点值表示法
设向量
点值表示法有如下性质
性质一
唯一性:一个n维点值与一个n维系数一一对应
性质二
点值下的乘法复杂度是
快速傅里叶变换
单位根
满足
的复数,称为单位根,记作
它可以看作是复平面上x轴绕逆时针方向旋转
单位根有一些显而易见的性质
蝴蝶变换
我们利用单位根作特殊值进行系数表示与点值表示的变换
设
那么有
显然
每一层对于一个确定的
这样我们可以用
逆离散傅里叶变换
从定义出发,从系数表示到点值表示的变换可以看成下面一个矩阵乘法
假如我们想通过
这个矩阵是这样的
这样,我们只需要把代进去的向量翻转一下,然后进行FFT即可
迭代/非迭代
根据上面的理论,我们已经可以进行迭代版的FFT了
但是经过观察,我们发现:
我们每次把当前序列的偶数项,奇数项分别提取出来分别列在左右,这样序列里的每个数最后都会在一个位置上,我们可以通过这个循环把每一项最终的位置算出来
for(int i=0;i<n;i++)R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));
然后我们就可以实现非迭代的FFT了,相比之下会快很多
0 0
- 快速傅里叶变换(FFT)(ZZ)
- FFT快速傅里叶变换;
- 快速傅里叶变换(FFT)
- 关于FFT快速傅里叶变换
- FFT快速傅里叶变换
- FFT - 快速傅里叶变换
- 快速傅里叶变换(FFT)
- 快速傅里叶变换(FFT)
- GSL快速傅里叶变换FFT
- 快速傅里叶变换FFT
- 【数学】快速傅里叶变换(FFT)
- FFT 快速傅里叶变换 初探
- 快速傅里叶变换(FFT)
- [快速傅里叶变换--FFT]
- [FFT]快速傅里叶变换
- 快速傅里叶变换(FFT)
- 快速傅里叶变换(FFT)
- 快速傅里叶变换 FFT 板子
- CodeForces 658D Bear and Polynomials
- 数据结构与算法——表达式树类的C++实现(二叉树)
- nodejs 升级命令
- mysql设置中文utf-8
- Linux多线程网络编程参考
- [FFT]快速傅里叶变换
- 线程的实现(通过继承Thread类实现调用start())
- Shiro学习(4)INI配置
- Android Studio导入jar包和删除jar包
- bzoj3306: 树
- 深入理解Objective-C:Category(上)
- 202. Happy Number
- 根据MRP建议对采购订单需求日期的建议修改采购订单需求日期 (续)
- ANDROID L——Material Design详解(主题和布局)