FFT学习笔记<理论篇>

前言:

下了好大决心,花了一个晚上的时间,终于看懂了FFT的理论与流程,然后又花了一个晚上实现代码,做了几道模板题。
FFT理论很深,却又很实用,一个很常用的用法就是加速多项式乘法,使得原来O(n^2)的复杂度减小到O(nlogn)。
下面我来大概讲述一下FFT的基本理论与算法流程,帮助初学者了解FFT,同时也是自己的复习。


<1> 介绍:

FFT,全称快速傅里叶变换(fast Fourier transform),是用来计算离散傅里叶变换(DFT)及其逆变换(IDFT)的快速算法。对于DFT,迷一点讲就是说它把时域信号转化为频域信号(不明白也没关系,并不影响学习算法)。在算法竞赛中,我们经常用FFT来加速卷积,做一些多项式乘法或是高精度乘法之类的。

我主要基于多项式乘法来介绍FFT,下面也都是用多项式乘法来讲的~


<2>一些定义:

我们将一个以x为变量的多项式A(x)表示为:

A(x)=j=0n1ajxj

若多项式 A(x) 的最高次的非零系数为 ak ,则称这是一个k次多项式,而它的次数界为>k的任意一个整数(一般取k+1)。
若有两个以x为变量的n次多项式 A(x) B(x) ,则它们的积可表示为:
C(x)=j=02n2cjxj

其中
cj=k=0jakbjk

C(x) 是一个次数界为2n-1的多项式。
另外,下面还大量提到了复数,并用专用符号 i 来表示虚数单位, i2=1


<3>系数表达与点值表达:

对一个次数界为n的多项式 A(x) 而言,其系数表达是一个由系数组成的向量 a=(a0,a1,...,an1)
而它的点值表达是一个由n个点值对组成的集合

(x0,y0),(x1,y1),...,(xn1,yn1)

使得对 k=0,1,...,n1 ,所有的 xk 各不相同,
yk=A(xk)

对于点值表达,我们可以看成是把多项式 A(x) 当做一个以 x 为自变量的函数,并把 y 作为因变量,从其图像中取n个点,取其坐标,就得到点值表示。
我们可以看到,求出这个多项式的n个点值复杂度为 O(n2) ,后面可以看到,如果我们巧妙地选取点 xk ,就可加速这一过程,使复杂度降至 O(nlogn)
我们将求值运算的逆称为插值(就是通过点值表达来求出系数表达),有一个 定理(差值多项式的唯一性):对于任意n个点值对组成的集合,其中所有的 xk 都不同,那么存在唯一的多项式 A(x) ,满足 yk=A(xk),k=0,1,...,n1 证明不再赘述,我们大概可以从两点确定一条直线,三点确定一条抛物线来大概认定这个定理吧。
对于多项式乘法,点值表达是十分方便的。若 C(x
  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值