快速傅里叶变换学习笔记

花费了一天,终于理解了这个知识点,写个博客记录一下,方便日后复习

一.复数

哎,别看到这里就走啊~

形如 \(z=a+bi\) 的数称为复数,\(a\)为实部,\(bi\)为虚部

\(i\):虚数单位,满足\(i^2=-1\)

如果你学过向量,请把它理解成一个向量

如果你没有学过,那么它是复平面上的一个点\((a,b)\)

复数相乘的规则:

模长相乘,幅角相加

二.单位根

满足\(x^n-1=0\)\(x\)称为\(n\)次单位根

\(\omega\)\(n\)次单位根,且\(\omega^0\),\(\omega^1\),\(\omega^2\),...,\(\omega^{n-1}\)恰好是所有的\(n\)次单位根,则称\(\omega\)\(n\)次本原单位根,记作\(\omega_n\)

重要的性质:\(n\)次单位根在复平面上等分单位圆

如何求\(n\)次本原单位根?

欧拉公式指出,在复数域\(\mathbb{C}\)上,\(e^{ix}=cosx+isinx\)

由前面"重要的性质"可以得到,\(\omega_n\)=\(exp(2\pi in)\)=\(cos \frac{2\pi }{n}\)+\(isin \frac{2\pi }{n}\)

以此我们可以表示出所有的\(n\)次单位根,即:
\(\omega_n^k\)=\(cos \frac{2\pi k}{n}\)+\(isin \frac{2\pi k}{n}\)

三.离散傅里叶变换DFT

前置芝士:多项式的点值表达

对于一个多项式\(f(x)\),我们代入每个\(x_i\),会得到对应的\(f(x_i)\),这些\((x_i,f(x_i))\)构成了这个多项式的点值表达,且唯一确定了这个多项式

前置芝士2:多项式相乘

两个多项式的乘积被定义为:
\(A(x)B(x)\)=\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}{a_ib_jx^{i+j}}\)=\(\sum\limits_{i=1}^{2n}{c_kx^k}\)

其中\(c\)\(a\)\(b\)的卷积,计算两个多项式相乘的朴素算法是\(O(n^2)\)

这时,我们惊喜的发现,如果将两个多项式先转换为点值表达,再相乘,时间复杂度只有\(O(n)\)

那只要将多项式转为点值表达不久可以啦?

很不幸,朴素的将多项式转为点值表达是\(O(n^2)\)

怎么办?

这时,傅里叶横空出世

猜你喜欢

转载自www.cnblogs.com/lgj-lgj/p/12230262.html