快速傅里叶变换FFT学习笔记

本文深入探讨快速傅里叶变换(FFT)及其在多项式乘法中的应用。首先介绍了多项式表示法、乘法及复数与单位根的基本概念,接着详细阐述傅里叶变换和快速傅里叶变换的原理,包括DFT、FFT和IFFT的计算过程。通过FFT,多项式乘法的时间复杂度可以从O(n^2)降低到O(nlogn)。文章最后提供了FFT和IFFT的代码实现,旨在帮助读者理解并掌握这一高效算法。
摘要由CSDN通过智能技术生成

问题背景

多项式无论在信息学还是在数学上都有重要应用。在信息学竞赛中,经常需要借助多项式解决问题,涉及到关于多项式的各种运算。对于两个次数为 n n n 的多项式其中加减法均可以在 O ( n ) O(n) O(n) 内算完,而一般来说乘法需要 O ( n 2 ) O(n^2) O(n2) 来解决。但多项式乘法作为各种运算的基础,需要用更快的速度求出。

前置知识

1.多项式函数的表示法

如果多项式 F F F 可表示为 ∑ i = 0 n a i x i \sum_{i=0}^na_ix^i i=0naixi,则称其中的 a i a_i ai 为这个多项式函数的 i i i 次项系数,简称系数。像这样的表示法被称为系数表示法。
如果将某特定值 x i x_i xi 代入多项式,则可得到 y i = F ( x i ) y_i=F(x_i) yi=F(xi),这样就确定了平面直角坐标系中的一个点 ( x i , y i ) (x_i,y_i) (xi,yi)。将互不相同 ( x 0 , y 0 ) , ( x 1 , y 1 ) , … , ( x m , y m ) (x_0,y_0),(x_1,y_1),\dots,(x_m,y_m) (x0,y0),(x1,y1),,(xm,ym) m + 1 m+1 m+1 个点代入多项式,则可以得到 m + 1 m+1 m+1 个方程。当 m = n m=n m=n 时,这个多项式的 n + 1 n+1 n+1 个系数都能被唯一确立,也就是说,互不相同的 n + 1 n+1 n+1 个点可以确定一个 n n n 次多项式函数。
从上述讨论中可以看出,点值表示法和系数表示法可以相互转换。

2.多项式的乘法

F ( x ) = ∑ i = 0 n a i x i F(x)=\sum_{i=0}^na_ix^i F(x)=i=0naixi G ( x ) = ∑ i = 0 m b i x i G(x)=\sum_{i=0}^mb_ix^i G(x)=i=0mbixi,那么 H ( x ) = F ( x ) G ( x ) = ∑ i = 0 n + m ∏ j + k = i a j b k x i H(x)=F(x)G(x)=\sum_{i=0}^{n+m}\prod_{j+k=i}a_jb_kx^i H(x)=F(x)G(x)=i=0n+mj+k=iajbkxi这是一个 n + m n+m n+m 次多项式。
如果选取一个点 x i x_i xi,则 H ( x i ) = H ( x ) ∣ x = x i = [ F ( x ) G ( x ) ] ∣ x = x i = F ( x i ) G ( x i ) H(x_i)=H(x)|_{x=x_i}=[F(x)G(x)]|_{x=x_i}=F(x_i)G(x_i) H(xi)=H(x)x=xi=[F(x)G(x)]x=xi=F(xi)G(xi)也就是说把两个多项式在 x i x_i xi 处的取值相乘就可以得到乘出来的多项式在 x i x_i xi 处的取值。这样选取互不相同的 n + m + 1 n+m+1 n+m+1 个点就能确定新的多项式了。

不难发现,用点值表示法处理问题往往更方便,傅里叶变换(Discrete Fourier Transformation,简称 DFT)就是把系数表示法转换为点值表示法的算法。
对于一个 n n n 次多项式 F ( x ) F(x) F(x) ,需要选取 m m m 个点,每个点计算要 O ( n ) O(n) O(n) ,总耗时为 O ( n m ) O(nm) O(nm)。这个复杂度和直接用系数表示法相乘一样,常数还比较大。快速傅里叶变换(Fast Fourier Transformation)就是对这种算法的改进。FFT 通过选取某些特定的点来提高计算效率,在此之前,先讲一下复数和单位根的概念

3.复数

在日常生活中,我们主要用到的是实数,而除了实数之外还有另一类数叫做虚数。实数好虚数统称为复数。
复数一般有两种表示方法。若用 c c c 表示一个复数,那么 c = a + b i = r e i θ c=a+bi=re^{i\theta} c=a+bi=reiθ
事实上,我们可以把一个负数和平面中一个点一一对应,那么两种表示法分别对应这平面直角坐标系和极坐标系的情况。我们称 r = a 2 + b 2 r=\sqrt{a^2+b^2} r=a2+b2 为模长,是一个非负数,称 θ = arctan ⁡ b a \theta=\arctan\frac{b}{a} θ=arctanab 为辐角,他是一个介于 0 0 0 2 π 2\pi 2π 的数值。
加减法
假设 n = a + b i , m = c + d i n=a+bi,m=c+di n=a+bi,m=c+di 为两个任意复数,则 n ± m = ( a + c ) ± ( b + d ) i n\pm m=(a+c)\pm(b+d)i n±m=(a+c)±(b+d)i
乘法
假设 n = a + b i , m = c + d i n=a+bi,m=c+di n=a+bi,m=c+di 为两个任意复数,则 n m = ( a c − b d ) + ( a d + b c ) i nm=(ac-bd)+(ad+bc)i nm=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值