Classical Algorithm-FFT

本文深入探讨了快速傅立叶变换(FFT)在多项式运算中的应用,包括多项式的系数表示与点表示,以及如何利用FFT高效进行多项式乘法。文章详细介绍了复数基础、单位根的概念,并通过实例说明了FFT在多项式运算中的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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++an1xin1,也可以表示多项式。

多项式乘积

在系数表示下是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θ1eiθ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=abixx=(a2+b2)=l2

单位根

ωnn=1→wn=ei2πn\omega_n^n=1\rightarrow w_n=e^{i\frac{2\pi}{n}}ωnn=1wn=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,,ωnn1}
多项式,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++an2x2n1A2(x)=a1+a3x++an1x2n1
对于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,ωn1,,ωn(n1)}带入再乘上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=ωniaiai=n1ωniyi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值