FFT快速傅利葉變換

2022-07-26 14:48:15 字數 1317 閱讀 7750

摘自:

快速傅利葉變換(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 6

#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。

view code

快速傅利葉變換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 如果要求他們的積,則需...