近来做一个大整数乘法的ACM题目时候一直被运行超时所困扰,上网搜索下后发现需要用到快速傅里叶变换和逆变换的算法来实现大整数乘法,才能把复杂度降到LogN * N.
看了一个星期的资料, 吃透了算法才把完整的代码敲出来^^。
代码里有三个主要的函数, 具体约束和说明见代码注释
FFT //计算区间内(左闭右开)的复数的离散傅里叶变换(按时间变换DIT-FFT)
IFFT //计算区间内(左闭右开)的复数的离散傅里叶逆变换(按时间变换DIT-IFFT)
RaderSort //对目标区间(左闭右开)元素进行倒位序排序,雷德算法
使用方法示例 1:
vector<complex<double>> I;
I.push_back(complex<double>(8, 0));
I.push_back(complex<double>(7, 0));
I.push_back(complex<double>(6, 0));
I.push_back(complex<double>(0, 0));
I.push_back(complex<double>(0, 0));
I.push_back(complex<double>(0, 0));
I.push_back(complex<double>

本文介绍了如何利用C++实现快速傅里叶变换(FFT)和其逆变换(IFFT),以解决大整数乘法的运行效率问题。通过阅读一周的资料并理解算法,作者提供了包含FFT、IFFT和RaderSort函数的代码,以助于将大整数乘法的复杂度降低到LogN * N。
最低0.47元/天 解锁文章
4406

被折叠的 条评论
为什么被折叠?



