快速傅立叶变换(FFT)

本文介绍了快速傅立叶变换(FFT)的基本原理和算法实现,包括点值运算和插值运算。点值运算是通过特殊选取的复数(N次单位复数根)对多项式进行求值,利用消去、折半和求和引理简化运算。递归的FFT算法通过分治策略将问题规模减半,最终达到O(nlogn)的时间复杂度。此外,还提到了原根和蝶形操作在FFT中的应用。

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

昨晚写了各种FFT模板,还是稍微记录一下吧

FFT原理

还是上最基本的问题:求 C(x)=A(x)B(x)
其中 A(x)=Σi<ni=0aixi B(x)=Σi<mi=0bixi
暴力求解的复杂度为 O(n2) ,FFT则可以在 O(nlogn) 的时间复杂度内实现

FFT的实现主要分两步,点值运算插值运算

  

点值运算

首先注意到 C(x) 的次数界 N 至多为 A(x) B(x) 的次数界之和,即 N<n+m
为了方便,我们先让 N 稍微取大一点

for(N = 1; N < n + m; N <<= 1);

我们先不急着求出 C(x) ,而是把 N 个值带入 A(x) B(x) ,求出 C(xk)=A(xk)B(xk)
如果这 N 个值的选取是任意的,那么这么做的复杂度仍然是 O(n2) ,算法并没有得到任何的优化,所以这 N 个数一定是特殊的

N 个值在复平面上选取,使其平均地分布在复平面上
如下图:当 N=8 时, ω0...78 的取值
复平面
由复数的运算可知,这 N 个数( N 次单位复数根的集合)构成了一个等比数列
其中 ω0N=1 , ωk+1N=ωkNωN

  
复平面上的这 N 个数有一些神奇的性质,将用几个引理来描述:
消去引理
ωdkdN=ωkN  (ωkN)2=ωkN/2
折半引理
如果 N>0 且为偶数,那么 N 次单位复数根的平方的集合就是 N/2 次单位复数根的集合
  由折半引理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值