FFT(1)
FFT
Complex
struct complex{
double re,im;
complex(double r,double i){re=r,im=i;}
complex(){re=0.0,im=0.0;}
complex operator+(complex b){return complex(re+b.re,im+b.im);}
complex operator-(complex b){return complex(re-b.re,im-b.im);}
complex operator*(complex b){return complex(re*b.re-im*b.im,re*b.im+im*b.re);}
};
FFT
void fft(complex* a,int n,int* bitrev,int f){
for(i=0;i<n;++i) if(i<bitrev[i]) swap(a[i],a[bitrev[i]]);
for(i=1;i<n;i<<=1){
complex wn(cos(pi/i),f*sin(pi/i));
p=i<<1;
for(j=0;j<n;j+=p){
complex w(1,0);
for(k=0;k<i;++k,w=w*wn){
t=a[j+k],t2=w*a[j+k+i];
a[j+k]=t+t2,a[j+k+i]=t-t2;
}
}
}
if(f<0) for(i=0;i<n;++i) a[i].re/=n,a[i].im/=n;
}
bitrev
for(N=1;N<pt;N<<=1,++L);
for(i=0;i<N;++i) bitrev[i]=(bitrev[i>>1]>>1)|((i&1)<<(L-1));
UR#34
这题我第一次写FFT.
#include <cstdio>
#include <cmath>
struct complex{
double re,im;
complex(double r,double i){re=r,im=i;}
complex(){re=0.0,im=0.0;}
complex operator+(complex b){return complex(re+b.re,im+b.im);}
complex operator-(complex b){return complex(re-b.re,im-b.im);}
complex operator*(complex b){return complex(re*b.re-im*b.im,re*b.im+im*b.re);}
};
#define pi 3.1415926535897932384626
complex t,t2;
int i,j,k,p;
void swap(complex& a,complex& b){
t=a;
a=b;
b=t;
}
void fft(complex* a,int n,int* bitrev,int f){
for(i=0;i<n;++i) if(i<bitrev[i]) swap(a[i],a[bitrev[i]]);
for(i=1;i<n;i<<=1){
complex wn(cos(pi/i),f*sin(pi/i));
p=i<<1;
for(j=0;j<n;j+=p){
complex w(1,0);
for(k=0;k<i;++k,w=w*wn){
t=a[j+k],t2=w*a[j+k+i];
a[j+k]=t+t2,a[j+k+i]=t-t2;
}
}
}
if(f<0) for(i=0;i<n;++i) a[i].re/=n,a[i].im/=n;
}
int n,m,bitrev[1000000];
complex a[1000000],b[1000000];
int N,L,pt;
int main(){
scanf("%d%d",&n,&m);
++n;++m;
for(i=0;i<n;++i) scanf("%lf",&(a[i].re));
for(i=0;i<m;++i) scanf("%lf",&(b[i].re));
pt=n+m-1;
for(N=1;N<pt;N<<=1,++L);
for(i=0;i<N;++i) bitrev[i]=(bitrev[i>>1]>>1)|((i&1)<<(L-1));
fft(a,N,bitrev,1);
fft(b,N,bitrev,1);
for(i=0;i<N;++i) a[i]=a[i]*b[i];
fft(a,N,bitrev,-1);
for(i=0;i<pt;++i) printf("%d ", (int)(a[i].re+0.5));
return 0;
}
FFT(1)的更多相关文章
- 并行计算提升32K*32K点(32位浮点数) FFT计算速度(4核八线程E3处理器)
对32K*32K的随机数矩阵进行FFT变换,数的格式是32位浮点数.将产生的数据存放在堆上,对每一行数据进行N=32K的FFT,记录32K次fft的时间. 比较串行for循环和并行for循环的运行时间 ...
- 【BZOJ-2179&2194】FFT快速傅里叶&快速傅里叶之二 FFT
2179: FFT快速傅立叶 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2978 Solved: 1523[Submit][Status][Di ...
- 为什么FFT时域补0后,经FFT变换就是频域进行内插?
应该这样来理解这个问题: 补0后的DFT(FFT是DFT的快速算法),实际上公式并没变,变化的只是频域项(如:补0前FFT计算得到的是m*2*pi/M处的频域值, 而补0后得到的是n*2*pi/N处的 ...
- FFT NNT
算算劳资已经多久没学新算法了,又要重新开始学辣.直接扔板子,跑...话说FFT算法导论里讲的真不错,去看下就懂了. //FFT#include <cstdio> #include < ...
- CC countari & 分块+FFT
题意: 求一个序列中顺序的长度为3的等差数列. SOL: 对于这种计数问题都是用个数的卷积来进行统计.然而对于这个题有顺序的限制,不好直接统计,于是竟然可以分块?惊为天人... 考虑分块以后的序列: ...
- ECF R9(632E) & FFT
Description: 上一篇blog. Solution: 同样我们可以用fft来做...就像上次写的那道3-idoit一样,对a做k次卷积就好了. 同样有许多需要注意的地方:我们只是判断可行性, ...
- fft练习
数学相关一直都好弱啊>_< 窝这个月要补一补数学啦, 先从基础的fft补起吧! 现在做了 道. 窝的fft 模板 (bzoj 2179) #include <iostream> ...
- FFT时域与频域的关系,以及采样速率与采样点的影响
首先对于FFT来说,输入的信号是一个按一定采样频率获得的信号序列,而输出是每个采样点对应的频率的幅度(能量). 下面详细分析: 在FFT的输出数据中,第一个值是直流分量的振幅(这样对应周期有无穷的可能 ...
- 【玩转单片机系列002】 如何使用STM32提供的DSP库进行FFT
前些日子,因为需要在STM32F103系列处理器上,对采集的音频信号进行FFT,所以花了一些时间来研究如何高效并精确的在STM32F103系列处理器上实现FFT.在网上找了很多这方面的资料做实验并进行 ...
- FFT
void FFT(complex a[],int n,int fl){ ,j=n/;i<n;i++){ if (i<j) {complex t=a[i];a[i]=a[j];a[j]=t; ...
随机推荐
- requirejs
//index.html <!doctype html> <html> <head> <meta charset="utf-8"> ...
- JS:采摘自JS精粹
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HNOI2002
对于当天的营业额,你要找到之前的数和他差的绝对值最小的和.由于这个是不断在插入的,所以用伸展树来维护. http://www.lydsy.com/JudgeOnline/problem.php?id= ...
- Linux operation strucutre
Under the /usr/src directory. 1.arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CP ...
- 【Gym 100971A】Treasure Island
题意 题目链接给你一个地图,'#'代表水,'.'代表陆地,'?'代表擦去的地图,可能是'#'也可能是'.'.地图中本该只有一块相连的陆地,若只有一种方案则输出确定的地图.若有多种方案,则输出‘Ambi ...
- 【HDU 2203】亲和串
题 题意 给你一个字符串s1,字符串s2,s1循环移位,使s2包含在s1中,则s2 是s1的亲和串 分析 把s1自身复制一遍接在后面. 方法一: 用strstr函数. 方法二: KMP算法. 方法三: ...
- 该如何理解AMD ,CMD,CommonJS规范--javascript模块化加载学习总结
是一篇关于javascript模块化AMD,CMD,CommonJS的学习总结,作为记录也给同样对三种方式有疑问的童鞋们,有不对或者偏差之处,望各位大神指出,不胜感激. 本篇默认读者大概知道requi ...
- mvc中EditorFor TextBoxFor什么区别
EditorFor 是映射到Model 属性上面,忽略用户自定义属性和样式 Model 可以为nullTextBoxFor是映射到Model 属性上面,可以用户自定义属性和样式 Model 不可以为n ...
- MyEclipse------如何添加jspsmartupload.jar+文件上传到服务器
下载地址:http://download.csdn.net/detail/heidan2006/182263 如何添加jspsmartupload.jar:右键“Web”工程->properti ...
- 牛顿迭代法求n方根
一.简单推导 二.使用 借助上述公式,理论上可以求任意次方根,假设要求a(假设非负)的n次方根,则有xn=a,令f(x)=xn-a,则只需求f(x)=0时x的值即可.由上述简单推导知,当f(x)=0时 ...