具體fft的原理,我就不解釋了
網上大佬講得都比我好
說白了fft直接作用就是計算兩個多項式f(x)*g(x)的結果的係數
暴力做法很容易想o(n*n) , fft用了一些數學上的方法把它優化成了 o(nlogn)
把這個式子按照奇偶性拆開:
for(int i=0;i>1]=x[i],r[i>>1]=x[i+1];
遞迴處理:
fft(l,n>>1,type);fft(r,n>>1,type);
構造單位根,合併式子:
wn(cos(2pi/n),sin(type2*pi/n))
for(int i=0;i>1;i++,w=wn) t=wr[i],x[i]=l[i]+t,x[i+(n>>1)]=l[i]-t;
遞迴版**:
#include #include #include #include #include #include #include #include #include using namespace std;
const int n = 3e6+5;
const double pi = acos(-1.0);
typedef complexdob;
int n,m;
dob a[n],b[n];
inline int gi()
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*res;
}void fft(dob *a,int len,int f)
}signed main()
把n在二進位制下拆開考慮
就有了非遞迴版,常熟也小了很多
非遞迴版:
#includeusing namespace std;
const int n=3e6+5;
const double pi=acos(-1);
typedef complexdob;
int n,m;
dob a[n],b[n];
inline int gi()
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*res;
}int r[n],l;
void fft(dob *a,int f)
快速傅利葉變換(FFT)學習筆記
模板理解 1.背景 完成兩個多項式的卷積 即 兩多項式形如 i 0nai xi sum n a x i 0n ai x i i 0mbi xi sum m b x i 0m bi x i 卷積後為 i 0n m ci j 0 iajb i j xi sum c sum ia b x i 0n m c...
學習筆記 快速傅利葉變換 FFT
學習之前先看懂這個 範德蒙德 vandermonde 方陣的逆矩陣的求法以及快速傅利葉變換 fft 中idft的原理 gzy hhh開個玩笑。講一下 fft 的流程,我也不準備長篇大論地分析 fft.這樣的流程,最終複雜度是 o n log n 的,現在我們從最簡單的點值表示法講起。證明 顯然。設 ...
快速傅利葉變換FFT
fft的作用就不多說了,搞訊號處理的人都會用上。fft的由來 傅利葉變換ft 離散傅利葉變換dft 快速傅利葉變換fft。學習資料 1 陳後金的 數字訊號處理 裡面深入淺出,該有的公式都有,程式設計思想也有。2 一篇系統講述傅利葉變換的帖子 3 學生對fft的理解 4 工程人員對fft的簡單明瞭的總...