FFT 快速傅利葉變換 學習筆記

2022-03-09 20:12:42 字數 1275 閱讀 3795

具體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的簡單明瞭的總...