Classical Algorithm-FFT

FFT

多项式的系数表示和点表示

系数表示

f = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n f=a_0+a_1 x+a_2 x^2+\cdots+a_{n}x^n f=a0+a1x+a2x2++anxn
f = { a 0 , a 1 , … , a n } f=\{a_0,a_1,\dots ,a_{n}\} f={a0,a1,,an}

点表示

在平面上选 ( n + 1 ) (n+1) (n+1)个点
( x i , y i ) (x_i,y_i) (xi,yi), y i = a 0 + a 1 x i + a 2 x i 2 + ⋯ + a n − 1 x i n − 1 y_i=a_0+a_1 x_i+a_2 x_i^2+\cdots+a_{n-1}x_i^{n-1} yi=a0+a1xi+a2xi2++an1xin1,也可以表示多项式。

多项式乘积

在系数表示下是 O ( n 2 ) O(n^2) O(n2),在点表示是 O ( n ) O(n) O(n)
( x i , f ( x i ) ) × ( x i , g ( x i ) ) = ( x i , f ( x i ) × g ( x i ) ) (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))

复变基础

i 2 = 1 a + b i 对 应 复 平 面 上 的 一 个 点 ( a , b ) a + b i = l ( cos ⁡ θ + i sin ⁡ θ ) = l e i θ 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θ
e i θ 1 ⋅ e i θ 2 = e i ( θ 1 + θ 2 ) e^{i\theta_1}\cdot e^{i\theta_2}=e^{i (\theta_1+\theta_2)} eiθ1eiθ2=ei(θ1+θ2)

Conjugate

x = a + b i x † = a − b i x ⋅ x † = ( a 2 + b 2 ) = l 2 x=a+bi\\x^\dagger=a-bi\\x\cdot x^\dagger=(a^2+b^2)=l^2 x=a+bix=abixx=(a2+b2)=l2

单位根

ω n n = 1 → w n = e i 2 π n \omega_n^n=1\rightarrow w_n=e^{i\frac{2\pi}{n}} ωnn=1wn=ein2π
ω 2 n 2 k = ω n k , ω n k + n 2 = − ω n k , ω n a + b = ω n a ω n b \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
代入 { ω n 0 , ω n 1 , … , ω n n − 1 } \{\omega_n^0,\omega_n^1,\dots,\omega_n^{n-1}\} {ωn0,ωn1,,ωnn1}
多项式, n = 2 k n=2^k n=2k
f ( x ) = ∑ a i x i = A 1 ( x 2 ) + x A 2 ( x 2 ) A 1 ( x ) = a 0 + a 2 x + ⋯ + a n − 2 x n 2 − 1 A 2 ( x ) = a 1 + a 3 x + ⋯ + a n − 1 x n 2 − 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++an2x2n1A2(x)=a1+a3x++an1x2n1
对于k< n 2 \frac{n}{2} 2n:
f ( ω n k ) = A 1 ( ω n 2 k ) + ω n k A 2 ( ω n 2 k ) f ( ω n k + n 2 ) = A 1 ( ω n 2 k ) − ω n k A 2 ( ω n 2 k ) 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

y i y_i yi当成系数,把 { ω n 0 , ω n − 1 , … , ω n − ( n − 1 ) } \{\omega_n^0,\omega_n^{-1},\dots,\omega_n^{-(n-1)}\} {ωn0,ωn1,,ωn(n1)}带入再乘上 1 n \frac{1}{n} n1,得到系数。
y i = ∑ ω n i ∗ a i a i = 1 n ∑ ω n − i ∗ y i y_i=\sum \omega_n^i*a_i\\ a_i=\frac{1}{n}\sum \omega_n^{-i}*y_i yi=ωniaiai=n1ωniyi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值