摘自:
快速傅利葉變換(fft): 一種能在o(nlogn)的時間內將乙個多項式轉換成它的點值表示的演算法。
點值表示:設a(x)是乙個n−1次多項式,那麼把n個不同的x代入,會得到n個y。這n對(x,y)唯一確定了該多項。由多項式可以求出其點值表示,而由點值表示也可以求出多項式。
設有兩個n−1次多項式a(x)和b(x)),我們的目標是——把它們乘起來。普通的多項式乘法是o(n^2),但有趣的是,兩個用點值表示的多項式相乘,複雜度是o(n)的!具體方法:c(xi)=a(xi)×b(xi)。
高精度乘法:等價於x=10的a(x)*b(x)
1 #include 2 #include 3 #include 4 #include 5 #include 6view code#define space putchar(' ')
7#define enter putchar('\n')
8using
namespace
std;
9 typedef long
long
ll;10 template
11void read(t &x)
21 template
22void
write(t x)
27const
int n = 1000005;28
const
double pi = acos(-1
);29 typedef complex cp;
30char
sa[n], sb[n];
31int n = 1
, lena, lenb, res[n];
32cp a[n], b[n], omg[n], inv[n];
33void
init()38}
39void fft(cp *a, cp *omg)
48for(int l = 2; l <= n; l *= 2)56
}57}58
intmain()
77for(int i = res[lena + lenb - 1] ? lena + lenb - 1: lena + lenb - 2; i >= 0; i--)
78 putchar('
0' +res[i]);
79enter;
80return0;
81}8283
//可以預處理ωkn和ω−kn,分別存在omg和inv陣列中。呼叫fft時,如果無需取倒數,則傳入omg;如果需要取倒數,則傳入inv。
快速傅利葉變換FFT
fft的作用就不多說了,搞訊號處理的人都會用上。fft的由來 傅利葉變換ft 離散傅利葉變換dft 快速傅利葉變換fft。學習資料 1 陳後金的 數字訊號處理 裡面深入淺出,該有的公式都有,程式設計思想也有。2 一篇系統講述傅利葉變換的帖子 3 學生對fft的理解 4 工程人員對fft的簡單明瞭的總...
快速傅利葉變換 FFT
bzoj 2179 fft快速傅利葉 果題 bzoj2194 請計算c k sigma a i b i k 其中 k i n 並且有 n 10 5。a,b中的元素均為小於等於100的非負整數。注意到i 和 i k有奇妙的聯絡 不妨嘗試把b翻轉 然後就變成卷積了。貼個模板 include define...
快速傅利葉變換 FFT
首先說一下我用fft做什麼,我要做的是多項式乘法,或者說,加速多項式乘法。考慮多項式a x j 0n 1aj xj,它一共有 n 項,我們稱它的次數界為 n。假設我們有兩個次數界為 n 的多項式a x 和b x 要求它們的和是非常簡單的,只需要將對應的係數相加,複雜度為o n 如果要求他們的積,則需...