算法学习:快速傅里叶变换(FFT)

前置知识


1.多项式

定义

形如:
f ( x ) = ∑ 0 n − 1 a i ⋅ x i f(x)=\sum_{0}^{n-1}ai\cdot x^i f(x)=0n1aixi

多项式表示法:
系数表示法

就是上式的写法

点值表示法

在f(x)上取n个点,就能唯一确定的表示出这个多项式。
证明如下:
∀ \forall n点集合c
定义集合A={ a 0 , a 1 , a 2 , . . . , a n − 1 a_0,a_1,a_2,...,a_{n-1} a0,a1,a2,...,an1}为某一个的n点的集合c所表示的多项式的系数集合。
反证:
若不然,则 ∃ \exists 集合B,B ̸ = \not = ̸=A,并且B也是c所表示多项式的系数集合。
此时,令Ci=Ai-Bi,那么带入c中的每一个元素,C所代表的多项式的值都会是0,也就是说,该n-1次多项式有n个零点,这显然与事实不符,所以证毕。

多项式相乘

如果用系数表示法直接相乘,那么计算的复杂度是O( n 2 n^{2} n2)的。
但是如果用点值表示法相乘,由于函数的相乘是每一个点的两个函数值相乘,所以复杂度是O(n)的。

2.复数相关

1.复数定义

在数学上,我们定义i,满足 i 2 = − 1 i^2=-1 i2=1也就是说 i = − 1 i=\sqrt{-1} i=1
定义一个复数为 a + b i a+bi a+bi那么由此我们就把数的定义扩充到了更大的范围。

2.复平面

复数的定义 a + b i a+bi a+bi,我们可以把a看成x轴,b看成y轴,那么每一个复数都可以看做在复平面上的一个点。当然,原本的实数就是复平面中x轴上的点。

3.复平面上的运算法则

复数的运算法则: ( a 1 + b 1 i ) ⋅ ( a 2 + b 2 i ) = (a_1+b_1i)\cdot(a_2+b_2i)= (a1+b1i)(a2+b2i)=
a 1 b 1 + a 1 b 2 i + a 2 b 1 i + b 1 b 2 i 2 = a_1b_1+a_1b_2i+a_2b_1i+b_1b_2i^2= a1b1+a1b2i+a2b1i+b1b2i2=
a 1 b 1 − b 1 b 2 + ( a 1 b 2 + a 2 b 1 ) i a_1b_1-b_1b_2+(a_1b_2+a_2b_1)i a1b1b1b2+(a1b2+a2b1)i

复平面上的复数可以看做向量,那么复平面上的复数可以表示为(辐角(与x轴的夹角大小),长度)。对于这种表示方法,向量的相加的法则是:长度相乘,辐角相加。
证明:
假设两个复数 a 1 + b 1 i , a 2 + b 2 i a_1+b_1i,a_2+b_2i a1+b1i,a2+b2i
那么两个复数的长度分别为 a 1 2 + b 1 2 , a 2 2 + b 2 2 \sqrt{ {a_1}^2+{b_1}^{2}},\sqrt{ {a_2}^2+{b_2}^{2}} a12+b12 ,a22+b22
相乘等于
a 1 2 a 2 2 + a 1 2 b 2 2 + b 1 2 a 2 2 + b 1 2 b 2 2 \sqrt{ {a_1}^2{a_2}^2+{a_1}^2{b_2}^2+{b_1}^2{a_2}^2+{b_1}^2{b_2}^2} a12a22+a12b22+b12a22+b12b22
而两个向量相乘后得到的向量 a 1 b 1 − b 1 b 2 + ( a 1 b 2 + a 2 b 1 ) i a_1b_1-b_1b_2+(a_1b_2+a_2b_1)i a1b1b1b2+(a1b2+a2b1)i的长度也等于上式的值。
辐角相加也类似可证,只不过需要用到定理 tan ⁡ a + b = tan ⁡ a + tan ⁡ b 1 − tan ⁡ a tan ⁡ b \tan a+b=\frac{\tan a+\tan b}{1-\tan a\tan b} tana+b=1tanatanbtana+tanb,这里就省略了。

单位根
定义

定义 ω n \omega_n ωn为在复平面上,以1为半径作圆,把圆等分成n份。
那么 ω n k \omega_n^k ωnk就表示这个n等分圆中,从x轴开始,逆时针数的第k条等分线所表示的复数。
我们规定x轴上的等分线为第0条,同时也是的n条,也就是说 ω n 0 = ω n n = 1 \omega_n^0=\omega_n^n=1 ωn0=ωnn=1,意思就是等分从x轴开始。
那么有一个显然的计算 ω n k \omega_n^k ωnk的方法: ω n k = cos ⁡ k 2 π n + sin ⁡ k 2 π n ⋅ i \omega_n^k=\cos k\frac{2\pi}{n}+\sin k\frac{2\pi}{n}\cdot i ωnk=coskn2π+sinkn2πi

性质
性质1

ω 2 n 2 k = ω n k \omega_{2n}^{2k}=\omega_n^k ω2n2k=ωnk
这个可以感性理解一下,一个圆分成n份,取第k份,和一个圆分成2n份,取第2k份,实际上是相同的。

性质2

ω n k + n 2 = − ω n k \omega_{n}^{k+\frac{n}{2}}=-\omega_n^k

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值