1. 程式人生 > >「學習筆記」Fast Fourier Transform 快速傅立葉變換

「學習筆記」Fast Fourier Transform 快速傅立葉變換

快速傅立葉變換( Fast Fourier Transform,FFT \text{Fast Fourier Transform,FFT} )是一種能在 O (

n log n ) O(n \log n) 的時間內完成多項式乘法的演算法,在 O I
OI
中的應用很多,是多項式相關內容的基礎。下面從頭開始介紹 FFT \text{FFT}

前置技能:弧度制、三角函式、平面向量。

多項式

形如 f (

x ) = a 0 + a 1 x + a 2 x 2 + . . . + a n x n f(x)=a_0+a_1x+a_2x^2+...+a_nx^n 的式子稱為 x x n n 次多項式。其中 a 0 , a 1 , . . . , a n a_0,a_1,...,a_n 稱為多項式的係數。

係數表達法

上面定義中的表示就是係數表達法。其係數可看成 n + 1 n+1 維向量 a = ( a 0 , a 1 , . . . , a n ) \vec a=(a_0,a_1,...,a_n)

點值表達法

把多項式看成一個函式,點值表示就用它影象上的 n + 1 n+1 個不同的點 ( x 0 , y 0 ) , . . . , ( x n , y n ) (x_0,y_0),...,(x_n,y_n) 來確定這個多項式。多項式有不止一個點值表示,可以證明每個點值表示確定唯一的係數表達多項式。

複數

虛數單位

i i 被稱為虛數單位。規定 i = 1 i=\sqrt {-1}

複平面

複數的平面由 x , y x,y 軸組成。 x x 軸稱為實軸, y y 軸稱為虛軸。平面內的每一個從原點到某個點 ( a , b ) (a,b) 的向量 a = ( a , b ) \vec a=(a,b) 表示複數 a + b i a+bi .

複數的模長: a 2 + b 2 \sqrt {a^2+b^2} .實軸到複數向量的轉角 θ \theta 稱為幅角。

複數的基本運算

  • 複數的加(減)法: ( a + b i ) + ( c + d i ) = ( a + c ) + ( b + d ) i (a+bi)+(c+di)=(a+c)+(b+d)i

  • 複數的乘法: ( a + b i ) ( c + d i ) = ( a c b d ) + ( b c + a d ) i (a+bi)(c+di)=(ac-bd)+(bc+ad)i

  • 一個結論:複數乘法,模長相乘,幅角相加

共軛複數

a + b i a+bi a b i a-bi 互為共軛複數。

單位根

n n 次單位根是滿足 z n = 1 z^n=1 n n 個複數,它們均分複平面的單位圓。

這些複數滿足模長為 1 1 ,幅角的 n n 倍是 2 π 2\pi 的倍數

根據尤拉公式:

尤拉公式 e x i = cos x + i sin x e^{xi}=\cos x+i \sin x ,其中 e e 為自然對數的底數, i i 為虛數單位。

可得 n n 次單位根為 e 2 π k i n , k [ 0 , n 1 ] e^{\frac{2\pi ki}{n}},k\in [0,n-1]

得:記 ω n = e 2 π i n , \omega_n=e^{\frac{2\pi i}{n}}, n n 次單位根為 ω n 0 , . . . , ω n n 1 \omega_n^0,...,\omega_n^{n-1}

單位根的性質

性質 1 1 :根據定義得到: ω 2 n 2 k = ω n k \omega_{2n}^{2k}=\omega_{n}^{k}