前置技能
虚数
i2=−1i=−1复数
任意复数 z 都可表示为 a+bi(a,b∈R)
a 叫做实部,定义 Re(z)=a
b 叫做虚部,定义 Im(z)=b
复平面
实数只有一根数轴
现在不够用了,于是我们再加一条
画一个平面直角坐标系,横轴定义为实轴,纵轴定义为虚轴
对于一个复数 z=a+bi,有如下定义
- 模 r=∣z∣=a2+b2
- 辐角 φ=argz 与实轴正方向的角度
于是可以得到 z=r(cosφ+isinφ)
运算规律
z1=a+bi,z2=c+di
加减
z1+z2=(a+c)+(b+d)i−z2=−c−diz1−z2=z1+(−z2)复平面上类比向量加减
乘法
φ1=argz1φ2=argz2r1=∣z1∣r2=∣z2∣z1×z2=(a+bi)(c+di)=(ac−bd)+(ad+bc)i=r1(cosφ1+isinφ1)r2(cosφ2+isinφ2)=r1r2((cosφ1cosφ2−sinφ1sinφ2)+i(sinφ1cosφ2+cosφ1sinφ2))=r1r2(cos(φ1+φ2)+isin(φ1+φ2))复平面上,复数相乘,幅角相加,模相乘
单位根
对于方程
我们有 n 个复数域上的解
在复平面上,这些点都落在单位圆上,它们将圆 n 等分
定义 ωn=cosn2π+isinn2π
ωnk=(ωn)k=cosn2πk+isinn2πk以 x5=1 为例
性质
- ω2n2k=ωnk
- ωnn/2=−1
多项式
F(x)=i=0∑n−1aixi代数基本定理
一个 n 次多项式,在复数域上恰有 n 个根
点值表示
选择 n 个互不相同的数带入可得到许多点值
(x1,y1),(x2,y2)⋯(xn,yn)根据 n 个点,我们同样可以确定一个唯一的 n−1 次多项式
证明
假设同时有两个不相同多项式 A(x),B(x) 满足 ∀i∈[1,n],A(x)=B(x)=yi
那么对于 C(x)=A(x)−B(x) 则有 n 个根,而 C(x) 为 n−1 次多项式
矛盾
快速傅里叶变换 FFT
离散傅里叶变换 DFT
已知多项式系数求点值表达
n 为 2 的整数次幂
F(x)e.g.F(x)A(x)e.g.A(x)B(x)e.g.B(x)F(x)e.g.F(x)∀kF(ωnk)∵ωnk+n/2F(ωnk+n/2)=i=0∑n−1aixi=a3x3+a2x2+a1x+a0=i=0∑n/2−1a2ix2i=a2x2+a0=i=0∑n/2−1a2i+1x2i=a3x2+a1=A(x)+xB(x)=a2x2+a0+x(a3x2+a1)∈[1,n/2]=A(ωnk)+ωnkB(ωnk)=ωnkωnn/2=−ωnk=A(ωnk+n/2)+ωnk+n/2B(ωnk+n/2)=A(ωnk)−ωnkB(ωnk)复杂度分析 DFT(n)=2DFT(n/2)+O(n)=O(nlogn)
逆离散傅里叶变换 IDFT
已知点值表达求系数表达
bi=F(ωni)ck=i=1∑nbi(ωn−k)i=i=1∑n(j=0∑n−1aj(ωni)j)(ωn−k)i=i=1∑nj=0∑n−1aj(ωnj−k)i=j=0∑n−1i=1∑naj(ωnj−k)i=j=0∑n−1(aji=1∑n(ωnj−k)i)S(ωnk)=ωnk+(ωnk)2+⋯+(ωnk)n=⎩⎪⎪⎨⎪⎪⎧1−ωnkωnk−(ωnk)n⋅ωnk=0,ωnk=1n,ωnk=1ck=j=0∑n−1ajS(ωnj−k)=nak∴ak=n1ck我们知道了点值 bi 可以通过和 DFT 类似的方法求出 ck
然后 ak=n1ck 就求出了系数表达