找回密码
 欢迎注册
查看: 11862|回复: 9

[求助] <求解惑> 关于FFT做大数乘法

[复制链接]
发表于 2012-2-16 09:44:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
不好意思请教下大家关于FFT做大数乘法的疑问。我在网上看到说可以用FFT做大数乘法,可以把数看成一个多项式.例如要计算两个N位数A(x) * B(x), 可以先计算A(x),B(x)的傅立叶变化得到A(X),B(X),再计算A(X)*B(X)的逆变换即得到A(x)B(x)的结果.
我的疑问是最初的计算是A(x) * B(x) 是N*N长度的计算,可是在计算A(x),B(x)的变换结果长度依然是N啊,那么在计算逆变换之前的A(X)*B()不依然是一个N*N的计算么?  到底是在什么地方减少了计算?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-2-16 10:13:07 | 显示全部楼层
FFT 及 IFFT 中的蝶形运算复杂度是 O(nlogn),远比 O(n^2) 低。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-2-16 11:28:40 | 显示全部楼层
可是我的理解是蝶形运算是用来计算A(x) --->A(X), 但是还要计算A(X) * B(X) ,再计算其逆变换.才能得到结果.在计算A(X) * B(X)的时候不是又回到了问题的最开始么?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-2-16 11:35:21 | 显示全部楼层
哦,是我说的有误。
A(X)*B(X) 是对应项相乘,复杂度仅 O(n),避免了通常的 O(n*n) 的复杂度。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-2-16 12:21:09 | 显示全部楼层
哦,是对应项相乘啊!谢谢!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-2-17 13:51:38 | 显示全部楼层
$A(0..n-1)$长度$n$
$B(0..m-1)$长度$m$
FFT计算的是循环卷积
而$A*B$是线性卷积
所以计算前先把$A,B$补0,使得长度变成$n+m-1$
得到$A'(0..n+m-2),B'(0..n+m-2)$
计算FFT
得到$A''(0..n+m-2),B''(0..n+m-2)$
然后计算向量相乘的$C=A''*B''$
得到$C(0..n+m-2)$
计算IFFT
得到$C'(0..n+m-2)$
最后处理进位...
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-2-17 14:02:03 | 显示全部楼层
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-9-3 14:21:48 | 显示全部楼层
不错!!!!!!!!!!!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2012-9-3 14:22:06 | 显示全部楼层
其实我也想知道这个问题
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2013-4-10 14:08:16 | 显示全部楼层
6# 仙剑魔


超过168小时不能评分,不过我还是赞美你一下!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-20 20:59 , Processed in 0.047069 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表