快速傅里叶变换_苦无信息 | 浅析 OI / ACM 中的快速傅里叶变换

登高自卑——数学基础

1. 多项式

1.0 概念
  • 数域: 包含了至少一个非零数的数集 , 满足  , 有 ,  实数集,复数集都是数域。
  • 多项式:若 , 则称 为数域  上的一个  次多项式。
  • 次数:对于多项式 , 如果 , 则  称为多项式  的次数,记为
为方便叙述,多项式 的各项系数满足:
1.1 多项式加法
给出多项式  , 多项式 , 若 , 则有:其中  为多项式中  的系数
1.2 多项式乘法
给出多项式  , 若 , 则有:

其中 

1.3 多项式的两种表示方式

在理解快速傅里叶变换的过程中,有两种多项式的表示方式需要了解:

  • 系数表示法:
    前文所述的形式表达式即为系数表示法。
  • 点值表示法:
    初中阶段经常会遇到一种题:给定坐标系中的三个点,求出过这三个点的二次函数。这说明,一些时候若干个点也可以确定一个多项式。我们不难发现,一个  次多项式需要  个点值来确定,不妨设为 :, 我们将称为多项式点值表示的一组基 

2. 复数

2.1 复数的运算法则
  • 复数的加减法:
  • 复数的乘法:
  • 单位根的定义:满足方程  的复数根 即为次单位根,不难知道这样的根有个, 分别记为 
  • 单位根的性质:
    • 简单性质:
    • 折半引理:若  ,  个  次单位根的平方的集合就是  个  次单位根的集合, 即 
    • 求和引理:若  

屠龙绝技?——快速傅里叶变换能干什么

快速傅里叶变换是离散傅里叶变换 (DFT) 高效、快速的计算方法。那么离散傅里叶变换能干什么呢?在信号处理领域离散傅里叶变换占有重要的地位,可以将时域上的信号变换到频域上,从而便于信号处理。借助这个特性我们可以给图像加上肉眼无法分辨出的水印,算是快速傅里叶变换比较有趣的一个应用。然而我们今天讨论的并非是信号处理中的应用,而是它在算法竞赛中的作用——加速多项式乘法。

多项式乘法

观察前文所述多项式乘法的定义,按照定义模拟复杂度为  如果我们想加速这个过程应该怎么办呢?我们考虑之前介绍的多项式的点值表示法,如果我们已经有了两个基相同的点值表示的多项式,那么获得他们的乘积的点值表示就非常简单了,只需要简单对应相乘即可。不难发现,用点值表示法来处理多项式乘法,复杂度为 在这里我们仿佛已经看到了胜利的曙光,我们做多项式乘法不是只需要先变成点值表示,再相乘,再变回系数表示就好了吗?然而,我们不难发现,朴素的把系数表示转换为点值表示复杂度为  , 所以总复杂度还是没有变优。那么,有没有什么方法可以优化系数表示转换为点值表示的过程呢?

Fast Fourier Transform

我们前文说道,快速傅里叶变换是离散傅里叶变换高效的计算方法,那么离散傅里叶变换是什么呢?给定多项式  和基 , 从而求出对应的 , 记作  我们不难发现,这个不就是系数表示转换成以单位根为基的点值表示的特殊情况吗?如果我们能够加速 的过程,我们就能够加速多项式乘法啦!为了方便叙述,接下来的过程中默认  为 2 的幂,如果不是,只需要补成 2 的幂,对复杂度并没有影响。首先我们 奇偶分离:令  , 则有:我们发现, 的  被划分为了两个子序列对应的多项式的  ,这可以让我们递归地工作,但是还不能帮助我们优化复杂度。这个时候我们选取的基的特殊性就体现了出来,由于  ,我们不难发现:

由于

所以有

我们观察到

到这里,我们已经看到了胜利的曙光。求出这两个点值表示要算的东西其实是一样的,只有一个正负号的区别。又由折半引理:

这次我们发现,想要计算 和,只需要计算规模为他们的一半的 和从这里我们不难写出这个算法的复杂度的表达式:

主定理知:

到这里,我们的FFT就算是结束了。

但是我们一开始的问题——多项式乘法还没有完全解决。现在我们掌握了将系数表示转换为点值表示的快速计算方法,那么如何将乘起来得到的点值表示转换回系数表示呢?

根据求和引理我们不难得到:

而这个被称为逆离散傅里叶变换 ( ) 的过程与  几乎没有区别,我们只需要做一些细微的调整即可。至此,我们就彻底解决了加速运算多项式乘法这一难题。步骤如下:
    1. 将给定的两个多项式利用  从系数表示转换为点值表示
    2. 将得到的点值表示以此相乘
    3. 将乘得的结果利用  从点值表示转换回系数表示
显然,这个过程的复杂度是  ,远远比朴素的各项相乘优秀。

参考资料

  • https://zhuanlan.zhihu.com/p/47021042
  • https://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E5%82%85%E9%87%8C%E5%8F%B6%E5%8F%98%E6%8D%A2/214957?fr=aladdin
  • https://baike.baidu.com/item/%E5%8D%95%E4%BD%8D%E6%A0%B9
欢迎关注苦无天下,带你从上帝视角看世界! a69cc76d4461355501e8681b39899b21.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值