登高自卑——数学基础
1. 多项式
1.0 概念
- 数域: 包含了至少一个非零数的数集 , 满足 , 有 , 实数集,复数集都是数域。
- 多项式:若 , 则称 为数域 上的一个 次多项式。
- 次数:对于多项式 , 如果 , 则 称为多项式 的次数,记为
1.1 多项式加法
给出多项式 , 多项式 , 若 , 则有:其中 为多项式中 的系数1.2 多项式乘法
给出多项式 , 若 , 则有:其中
1.3 多项式的两种表示方式
在理解快速傅里叶变换的过程中,有两种多项式的表示方式需要了解:
- 系数表示法:
前文所述的形式表达式即为系数表示法。 - 点值表示法:
初中阶段经常会遇到一种题:给定坐标系中的三个点,求出过这三个点的二次函数。这说明,一些时候若干个点也可以确定一个多项式。我们不难发现,一个 次多项式需要 个点值来确定,不妨设为 :, 我们将称为多项式点值表示的一组基
2. 复数
2.1 复数的运算法则
- 复数的加减法:
- 复数的乘法:
- 单位根的定义:满足方程 的复数根 即为次单位根,不难知道这样的根有个, 分别记为
- 单位根的性质:
- 简单性质:
- 折半引理:若 , 个 次单位根的平方的集合就是 个 次单位根的集合, 即
- 求和引理:若
屠龙绝技?——快速傅里叶变换能干什么
快速傅里叶变换是离散傅里叶变换 (DFT) 高效、快速的计算方法。那么离散傅里叶变换能干什么呢?在信号处理领域离散傅里叶变换占有重要的地位,可以将时域上的信号变换到频域上,从而便于信号处理。借助这个特性我们可以给图像加上肉眼无法分辨出的水印,算是快速傅里叶变换比较有趣的一个应用。然而我们今天讨论的并非是信号处理中的应用,而是它在算法竞赛中的作用——加速多项式乘法。多项式乘法
观察前文所述多项式乘法的定义,按照定义模拟复杂度为 如果我们想加速这个过程应该怎么办呢?我们考虑之前介绍的多项式的点值表示法,如果我们已经有了两个基相同的点值表示的多项式,那么获得他们的乘积的点值表示就非常简单了,只需要简单对应相乘即可。不难发现,用点值表示法来处理多项式乘法,复杂度为 在这里我们仿佛已经看到了胜利的曙光,我们做多项式乘法不是只需要先变成点值表示,再相乘,再变回系数表示就好了吗?然而,我们不难发现,朴素的把系数表示转换为点值表示复杂度为 , 所以总复杂度还是没有变优。那么,有没有什么方法可以优化系数表示转换为点值表示的过程呢?Fast Fourier Transform
我们前文说道,快速傅里叶变换是离散傅里叶变换高效的计算方法,那么离散傅里叶变换是什么呢?给定多项式 和基 , 从而求出对应的 , 记作 我们不难发现,这个不就是系数表示转换成以单位根为基的点值表示的特殊情况吗?如果我们能够加速 的过程,我们就能够加速多项式乘法啦!为了方便叙述,接下来的过程中默认 为 2 的幂,如果不是,只需要补成 2 的幂,对复杂度并没有影响。首先我们 奇偶分离:令 , 则有:我们发现, 的 被划分为了两个子序列对应的多项式的 ,这可以让我们递归地工作,但是还不能帮助我们优化复杂度。这个时候我们选取的基的特殊性就体现了出来,由于 ,我们不难发现:而
由于
所以有
我们观察到
到这里,我们已经看到了胜利的曙光。求出这两个点值表示要算的东西其实是一样的,只有一个正负号的区别。又由折半引理:
这次我们发现,想要计算 和,只需要计算规模为他们的一半的 和从这里我们不难写出这个算法的复杂度的表达式:由主定理知:
到这里,我们的FFT就算是结束了。
但是我们一开始的问题——多项式乘法还没有完全解决。现在我们掌握了将系数表示转换为点值表示的快速计算方法,那么如何将乘起来得到的点值表示转换回系数表示呢?
根据求和引理我们不难得到:
而这个被称为逆离散傅里叶变换 ( ) 的过程与 几乎没有区别,我们只需要做一些细微的调整即可。至此,我们就彻底解决了加速运算多项式乘法这一难题。步骤如下:-
- 将给定的两个多项式利用 从系数表示转换为点值表示
- 将得到的点值表示以此相乘
- 将乘得的结果利用 从点值表示转换回系数表示
参考资料
- 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](https://i-blog.csdnimg.cn/blog_migrate/bc9927ed44d7ac602660f5a9c49a2163.jpeg)