「FFT」學習筆記
FFT即快速傅立葉變換,離散傅立葉變換及其逆變換的快速演算法。在OI中用來優化多項式乘法。
FFT涉及到的概念
多項式
可表示為$A(x)$。設$A(x)$為$n$次,那麼有$A(x)=a_0+a_1x+a_2x^2+...+a_nx^n$
係數表示法:
即用$n+1$個係數來表示一個$n$次多項式,寫作$(a_0,a_1,...,a_n)$。
我們可以將$(a_0,a_1,...,a_n)$看做一個係數向量。
點值表示法:
當自變數$x$分別取$n+1$個不同的值時,會得到$n+1$個對應的結果。可以將多項式看做一個$n$次函式,這個函式被$n+1$個點$(x_0,y_0),(x_1,y_1),...,(x_n,y_n)$確定。
我們可以將$(A(x_0),A(x_1),...,A(x_n))$看做一個點值向量。也就是$(y_0,y_1,...,y_n)$
複數
形如$a+bi$,可以理解為複平面上的向量$(a,b)$
複數的乘法法則幾何意義上可以理解為模長相乘,幅角相加。代數意義上可以理解為$(a+bi)(c+di)=ac-bd+(ad+bc)i$
單位根
在複平面內以原點為圓心,1為半徑作圓。稱這個圓為單位圓。
以$(1,0)$為起點,將圓$n$等分。設點$(1,0)$為第0個,那麼這些等分點稱為$n$次單位根。記作$\omega_n^k$。由於模長均為1,所以根據複數乘法法則,這$n$個等分點可以依次表示為$\omega_n^0$,$\omega_n$,$\omega_n^2$,...,$\omega_n^{n-1}$
根據三角函式,很容易推得單位根的表示方法:$\omega_n^k=cos\dfrac{2k\pi}{n}+isin\dfrac{2k\pi}{n}$ (尤拉公式)
性質一:$\omega_{2n}^{2k}=\omega_n^k$ (表示的是同一個點)
性質二:$\omega_n^k=-\omega_n^{k+\frac{n}{2}}$ (關於原點中心對稱)