FFT
多项式的系数表示和点表示
系数表示
f=a0+a1x+a2x2+⋯+anxnf=a_0+a_1 x+a_2 x^2+\cdots+a_{n}x^nf=a0+a1x+a2x2+⋯+anxn
f={a0,a1,…,an}f=\{a_0,a_1,\dots ,a_{n}\}f={a0,a1,…,an}
点表示
在平面上选(n+1)(n+1)(n+1)个点
(xi,yi)(x_i,y_i)(xi,yi),yi=a0+a1xi+a2xi2+⋯+an−1xin−1y_i=a_0+a_1 x_i+a_2 x_i^2+\cdots+a_{n-1}x_i^{n-1}yi=a0+a1xi+a2xi2+⋯+an−1xin−1,也可以表示多项式。
多项式乘积
在系数表示下是O(n2)O(n^2)O(n2),在点表示是O(n)O(n)O(n),
(xi,f(xi))×(xi,g(xi))=(xi,f(xi)×g(xi))(x_i,f(x_i))\times (x_i,g(x_i))=(x_i,f(x_i)\times g(x_i))(xi,f(xi))×(xi,g(xi))=(xi,f(xi)×g(xi))
复变基础
i2=1a+bi对应复平面上的一个点(a,b)a+bi=l(cosθ+isinθ)=leiθi^2=1\\a+bi对应复平面上的一个点(a,b)\\a+bi=l(\cos\theta+i\sin \theta)=le^{i\theta}i2=1a+bi对应复平面上的一个点(a,b)a+bi=l(cosθ+isinθ)=leiθ
eiθ1⋅eiθ2=ei(θ1+θ2)e^{i\theta_1}\cdot e^{i\theta_2}=e^{i (\theta_1+\theta_2)}eiθ1⋅eiθ2=ei(θ1+θ2)
Conjugate
x=a+bix†=a−bix⋅x†=(a2+b2)=l2x=a+bi\\x^\dagger=a-bi\\x\cdot x^\dagger=(a^2+b^2)=l^2x=a+bix†=a−bix⋅x†=(a2+b2)=l2
单位根
ωnn=1→wn=ei2πn\omega_n^n=1\rightarrow w_n=e^{i\frac{2\pi}{n}}ωnn=1→wn=ein2π
ω2n2k=ωnk,ωnk+n2=−ωnk,ωna+b=ωnaωnb\omega_{2n}^{2k}=\omega_n^k,\omega_n^{k+\frac{n}{2}}=-\omega_n^k,\omega_n^{a+b}=\omega_n^a\omega_n^bω2n2k=ωnk,ωnk+2n=−ωnk,ωna+b=ωnaωnb
代入{ωn0,ωn1,…,ωnn−1}\{\omega_n^0,\omega_n^1,\dots,\omega_n^{n-1}\}{ωn0,ωn1,…,ωnn−1}
多项式,n=2kn=2^kn=2k
f(x)=∑aixi=A1(x2)+xA2(x2)A1(x)=a0+a2x+⋯+an−2xn2−1A2(x)=a1+a3x+⋯+an−1xn2−1
f(x)=\sum a_ix^i=A_1(x^2)+x A_2(x^2)\\
A_1(x)=a_0+a_2x+\cdots +a_{n-2}x^{\frac{n}{2}-1}\\
A_2(x)=a_1+a_3x+\cdots +a_{n-1}x^{\frac{n}{2}-1}\\
f(x)=∑aixi=A1(x2)+xA2(x2)A1(x)=a0+a2x+⋯+an−2x2n−1A2(x)=a1+a3x+⋯+an−1x2n−1
对于k<n2\frac{n}{2}2n:
f(ωnk)=A1(ωn2k)+ωnkA2(ωn2k)f(ωnk+n2)=A1(ωn2k)−ωnkA2(ωn2k)
f(\omega_n^k)=A_1(\omega_n^{2k})+\omega_n^kA_2(\omega_n^{2k})\\
f(\omega_n^{k+\frac{n}{2}})=A_1(\omega_n^{2k})-\omega_n^{k}A_2(\omega_n^{2k})
f(ωnk)=A1(ωn2k)+ωnkA2(ωn2k)f(ωnk+2n)=A1(ωn2k)−ωnkA2(ωn2k)
IDFT
把yiy_iyi当成系数,把{ωn0,ωn−1,…,ωn−(n−1)}\{\omega_n^0,\omega_n^{-1},\dots,\omega_n^{-(n-1)}\}{ωn0,ωn−1,…,ωn−(n−1)}带入再乘上1n\frac{1}{n}n1,得到系数。
yi=∑ωni∗aiai=1n∑ωn−i∗yiy_i=\sum \omega_n^i*a_i\\
a_i=\frac{1}{n}\sum \omega_n^{-i}*y_i
yi=∑ωni∗aiai=n1∑ωn−i∗yi