(模板)FFT
2015-09-22 13:13
155 查看
const double Pi = acos(-1.0); struct complex { double r, i; complex(double r = 0, double i = 0):r(r), i(i) {} complex operator + (const complex &ot) const { return complex(r + ot.r, i + ot.i); } complex operator - (const complex &ot) const { return complex(r - ot.r, i - ot.i); } complex operator * (const complex &ot) const { return complex(r * ot.r - i * ot.i, r * ot.i + i * ot.r); } }x1 , x2 ; void change(complex *y, int len) { for(int i = 1, j = len / 2; i < len - 1; ++i) { if(i < j) swap(y[i], y[j]); int k = len / 2; while(j >= k) { j -= k; k >>= 1; } j += k; } } void FFT(complex *y, int len, int on) { change(y, len); for(int h = 2; h <= len; h <<= 1) { complex wn = complex(cos(on * 2 * Pi / h), sin(on * 2 * Pi / h)); for(int j = 0; j < len; j += h) { complex w = complex(1, 0); for(int k = j; k < j + h / 2; ++k) { complex u = y[k]; complex t = y[k+h/2] * w; y[k] = u + t; y[k+h/2] = u - t; w = w * wn; } } } if(on == -1) { for(int i = 0; i < len; ++i) y[i].r /= len; } }
相关文章推荐
- leetcode笔记:Valid Parentheses
- 自学Swift-斯坦福笔记整理(十三) Application Lifecycle and Core Motion
- Mysql触发器 存储
- Inno Setup 快速打包应用程序 简单 软件打包发行的使用说明
- Oracle中删除用户下所有对象的多种方法
- Android学习记录:Paint,Canvas和Bitmap
- 查询自己的ip和城市接口
- CSA 第五届研讨会 想象
- java 获取当月第一天和最后一天 获取前一个月第一天和最后一天
- VM虚拟机Linux克隆后网卡的相关操作!
- 程序员挑战高薪,你必须会的十大面试题
- 图像增强之直方图均衡化
- Activiti入门教程十(详解历史服务组件HistoryService)
- Activiti入门教程十(详解历史服务组件HistoryService)
- rsync使用
- IOS开发之UIScrollView控件详解
- ubuntu下安装ftp服务器
- Win7系统如何修改BIOS设置预防电脑病毒
- Hibernate Criteria 多层次查询关联问题
- 如何分辨周围聪明人(转自知乎)