【学习笔记】极其美妙的算法——FFT(快速傅里叶变换)

本文介绍了快速傅里叶变换(FFT)的基本概念、多项式表示法,包括系数表示法和点值表示法,并详细探讨了如何通过递归和复数运算解决多项式乘法的问题,最终将FFT的时间复杂度优化到O(nlog2n)。此外,还讨论了从点值表示法转换回系数表示法的IFFT(快速傅里叶逆变换),以及如何通过迭代改进FFT的效率。
摘要由CSDN通过智能技术生成


前言

最近学会了FFT,一个极其美妙的算法!
众所周知FFT英文全称是 Fast Fast TLE Fast Fourier Transform


FFT是什么?

FFT(快速傅里叶变换)是DFT(离散傅里叶变换)的优化,用于加速多项式乘法。
即:
F ( x ) = ∑ i = 0 n f i x i F(x)=\sum_{i=0}^nf_ix^i F(x)=i=0nfixi , G ( x ) = ∑ i = 0 n g i x i G(x)=\sum_{i=0}^ng_ix^i G(x)=i=0ngixi
F ( x ) G ( x ) F(x)G(x) F(x)G(x)


多项式表示法

系数表示法

系数表示法是大家最常见的一种表示多项式的方法。
比如 F ( x ) = ∑ i = 0 n f i x i F(x)=\sum_{i=0}^nf_ix^i F(x)=i=0nfixi
那么这个多项式我们就可以用 { f 0 , f 1 , . . . , f n } \{f_0,f_1,...,f_n\} { f0,f1,...,fn} 这些系数表示。
普通的暴力多项式乘法也是基于这种系数表示法上的。

点值表示法

先抛出个定理: n + 1 n+1 n+1 个不同的点能够确定一个次数为 n n n的多项式
我也不会证
我们把多项式放到平面直角坐标系中就是个函数了。
那这个多项式 F ( x ) F(x) F(x) 就可以表示为 { ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) , . . . , ( x n , f ( x n ) ) } \{(x_0,f(x_0)),(x_1,f(x_1)),...,(x_n,f(x_n))\} { (x0,f(x0)),(x1,f(x1)),...,(xn,f(xn))}

对于两个函数 F ( x ) = { ( x 0 , f ( x 0 ) ) , ( x 1 , f ( x 1 ) ) , . . . , ( x n , f ( x n ) ) } F(x)=\{(x_0,f(x_0)),(x_1,f(x_1)),...,(x_n,f(x_n))\} F(x)={ (x0,f(x0)),(x1,f(x1)),...,(xn,f(xn))} G ( x ) = { ( x 0 , g ( x 0 ) ) , ( x 1 , g ( x 1 ) ) , . . . , ( x n , g ( x n ) ) } G(x)=\{(x_0,g(x_0)),(x_1,g(x_1)),...,(x_n,g(x_n))\} G(x)={ (x0,g(x0)),(x1,g(x1)),...,(xn,g(xn))} 的乘积等于 { ( x 0 , f ( x 0 ) g ( x 0 ) ) , ( x 1 , f ( x 1 ) g ( x 1 ) ) , . . . , ( x n , f ( x n ) g ( x n ) ) } \{(x_0,f(x_0)g(x_0)),(x_1,f(x_1)g(x_1)),...,(x_n,f(x_n)g(x_n))\} { (x

  • 9
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值