什么是Fast Fourier Transform算法

zhuzhu830829 2002-01-30 02:05:41
...全文
194 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuzhu830829 2002-02-03
  • 打赏
  • 举报
回复
发分
lovedog 2002-01-31
  • 打赏
  • 举报
回复
还有算法的可计算性!NP,NPC看什么书好!
lovedog 2002-01-31
  • 打赏
  • 举报
回复
海星:可不可以很难好理解的讲一下积分变换以及和复变函数的联系!!
WQ 2002-01-31
  • 打赏
  • 举报
回复
图形学可完成
空域到频域的转换
starfish 2002-01-31
  • 打赏
  • 举报
回复
大整数乘法的另外一种分治算法(不是和FFT类似的):

我们将n位的二进制整数X和Y各分为2段,每段的长为n/2位(为简单起见,假设n是2的幂。

由此,X=A*2^(n/2)+B ,Y=C*2^(n/2)+D。这样,X和Y的乘积为:

X*Y=(A*2^(n/2)+B)(C*2^(n/2)+D)=A*C*2^n+(A*D+C*B)*2^(n/2)+B*D (1)

如果按式(1)计算X*Y,则我们必须进行4次n/2位整数的乘法(A*C,A*D,B*C和B*D),
以及3次不超过n位的整数加法(分别对应于式(1)中的加号),此外还要做2次移位(分别对应于式(1)中乘2^n和乘2^(n/2))。所有这些加法和移位共用O(n)步运算。设T(n)是2个n位整数相乘所需的运算总数,则由式(1),我们有:
T(1) = 1
T(n) = 4T(n/2)+O(n) (2)
由此可得T(n)=O(n^2)。因此,用(1)式来计算X和Y的乘积并不比小学生的方法更有效。要想改进算法的计算复杂性,必须减少乘法次数。为此我们把XY写成另一种形式:

X*Y=A*C*2^n+[(A-B)*(D-C)+A*C+B*D]*2^(n/2)+B*D (3)

虽然,式(3)看起来比式(1)复杂些,但它仅需做3次n/2位整数的乘法(A*C,B*D和(A-B)*(D-C)),6次加、减法和2次移位。由此可得:
T(1) = 1
T(n) = 3T(n/2) + O(n) (4)

用解递归方程的主定理(master theorem)马上可得其解为T(n)=O(n^log3)=O(n^1.59)。

其实这种方法很多地方都用到,将一个简单的式子写成复杂的形式反而会起到不可思议的效果,呵呵:)


所谓的利用FFT进行大整数乘法要比较麻烦一点,但是他的复杂度只有O(nlogn),进行大整数乘法相当于将两个多项式相乘,例如234 = 2*x^2 + 3*x^1 + 4*x^0,并令x=10,然后可以将两个整数写成两个多项式,先求多项式相乘的结果,然后直接按位输出多项式系数即可。多项式有两种表示方法,一种是系数表示方法,另一种是点值表示法,多项式A,B进行快速乘法的过程是: 先将多项式A,B化为点值表示,这一步耗时O(nlogn),然后两个点值表示的多项式相乘,耗时O(n),然后将结果从点值表示再转化为系数表示,这一步耗时又是O(nlogn)。在第一和第三步都用到了分治法的思想,这里和离散FFT的计算几乎一模一样。
具体的写起来比较麻烦,打字太累了~~
starfish 2002-01-31
  • 打赏
  • 举报
回复
应该说Fourier Transform的应用倒是很多
确实很奇妙
很多问题中进行一下Fourier Transform就会变得很简单,Fourier Transform的实质是时域和频域的变换,这种变换常常使得复杂问题的另一面变得非常简单。很奇妙
starfish 2002-01-31
  • 打赏
  • 举报
回复
其实FFT的思想就是分治法,那些所谓的很多应用(大整数相乘、RSA加密、大素数,etc)都是分治法的思想,我觉得都是硬和FFT扯上关系,呵呵
zhuzhu830829 2002-01-30
  • 打赏
  • 举报
回复
具体如何计算,能说详细一点吗?
mathe 2002-01-30
  • 打赏
  • 举报
回复
快速傅利叶变换,可以用于计算卷积,将o(N*N)的问题化为o(N*logN).
gofor 2002-01-30
  • 打赏
  • 举报
回复
在课程“数值计算方法”中有介绍,FFT是一个令我惊异的算法,有很多重要的应用。两个大整数相乘,在RSA加密算法中是主要的耗时运算,另外求大素数时有用,建议你去参观一下http://www.mersenne.org/,在该网站或GIMPS中有FFT应用于大整数乘法的完整程序,目前世界上最大的素数就是用它找出的。另外你可看看一本名叫“快速数论变换”的书。

39th Known Mersenne Prime Found!!

It's huge - over 4 million digits! Michael Cameron, 20, from Canada proved 2^13466917-1 is prime on November 14, 2001. Although this prime took only a few weeks on his 800 MHz AMD computer, it took nearly two and half years and tens of thousands of computers for the GIMPS project to test well over 100,000 unsuccessful candidates. Congratulations to Michael and every GIMPS contributor for their part in this remarkable find. For more information, check out these links:
gofor 2002-01-30
  • 打赏
  • 举报
回复
mathe:
michangila 2002-01-30
  • 打赏
  • 举报
回复
找本信号处理的书看看吧

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧