快速傅里叶变换-初步想法

快速傅里叶变换就是执行多项式乘法。

朴素算法的话就是我们普通乘法的过程,复杂度是n^2。但是用傅里叶,可以打倒nlogn的复杂度。

好,首先给出两个式子

\small f(x)=a_{0}+a_{1}x+a_{2}x^{2}+a_{3}x^{3}...a_{n-1}x^{n-1}

\small g(x)=b_{0}+b_{1}x+b_{2}x^{2}+b_{3}x^{3}...b_{n-1}x^{n-1}

朴素的算法就不讲了。

首先来讲一种点集表示方法。对于f(x),把a当作未知数的话,一共有n个未知数,然后把f(x)看成一个函数的话,解出这n个未知数需要n个点,所以我们可以把f(x)和g(x)表示成下面这种形式

\small f(x)={(x_{0},f(x_{0})),(x_{1},f(x_{1})),(x_{2},f(x_{2})).(x_{3},f(x_{3}))...(x_{n-1},f(x_{n-1}))}

\small g(x)={(x_{0},g(x_{0})),(x_{1},g(x_{1})),(x_{2},g(x_{2})).(x_{3},g(x_{3}))...(x_{n-1},g(x_{n-1}))}

然后相乘的话就可以表示成为这样子。

\small f(x)={(x_{0},f(x_{0})*g(x_{0})),(x_{1},f(x_{1}*g(x_{1})),(x_{2},f(x_{2}*g(x_{2})).(x_{3},f(x_{3})*g(x_{3}))...(x_{n-1},f(x_{n-1})*g(x_{n-1}))}

没错就这样变成了O(n)的复杂度,很巧妙吧,但是遗憾的告诉你,多项式转化为点集的朴素方法也需要n^2的复杂度...

但是傅里叶就厉害了,它就对此进行了优化,从而就有了快速傅里叶变换。

```后续更新,时间不足。

发布了67 篇原创文章 · 获赞 4 · 访问量 4805

猜你喜欢

转载自blog.csdn.net/weixin_44203780/article/details/93659281