博客摘录「 十分简明易懂的FFT(快速傅里叶变换)」2023年9月8日

1.  离散傅里叶变换与多项式的表示

注:离散傅里叶变换的一种用法是:实现多项式的两种表示的转换

        DFT实现系数表示→点值表示;IDFT实现点值表示→系数表示

      【只要令F是点值f(\omega)的向量,W是\omega构成的范德蒙德矩阵,A是多项式系数向量,

        在求点值表示时F=W*A就是用到DFT,在求系数表示时A=W^(-1)*F就是用到IDFT】

      【由于范德蒙德矩阵的性质,W与W^(-1)关系很简单,从而做DFT和IDFT差异不大,

        故下面分析二者有相同的时间复杂度】

“但是朴素的系数表示法转点值表示法的算法还是O(n^2)的,逆操作类似”

注释:系数表示→点值表示:秦九韶算法+算n个点值,故时间复杂度O(n^2)

           点值表示→系数表示:线性方程组的求值问题最佳算法时间复杂度O(n^2)(如高斯赛德尔迭代法)

"虽然DFT搞出来一堆很牛逼的ω作为代入多项式的x值
 但只是代入这类特殊x值法的变换叫做DFT而已,还是要代入单位根暴力计算"

注释:这里的意思是,在系数表示→点值表示的过程中,可以取DFT想法中选取的这一组ω值来进行,由于单位根的一些性质,这可以减少计算量

“现在我们就可以递归分治来搞FFT了”

注释:根据文中的FFT分析思路,我们要求的多项式A(x)的前半部分点值A(\omega^k_{n})和后半部部分对应点值A(\omega^{k+n/2}_{n})可以由A_1(\omega^k_{n/2})A_2(\omega^k_{n/2})得到,而A1(x)和A2(x)是由A(x)的奇偶系数分配的系数,次数是A(x)的1/2的多项式,因此求解k\leq n/2A_1(\omega^k_{n/2})A_2(\omega^k_{n/2})就可以看作求A(\omega^k_{n})的相同类型问题,从而可以用divide-and-conquer的方法通过递归解决,可以通过递归树分析求一个值的时间复杂度为log_2(n)

"一个多项式在分治的过程中乘上单位根的共轭复数,分治完的每一项除以n即为原多项式的每一项系数,意思就是说FFT和IFFT可以一起搞“

注:从而FFT和IFFT由相同的时间复杂度;

       FFT方便了系数表示→点值表示的过程,相应的他的逆过程IFFT方便了点值表示→系数表示的过程

但一定注意:

“FFT只能处理n为2的整数次幂的多项式”

“这个n一定要是2的幂。如果不是,你可以强制改成是。比如:n=6,你可以加上0*n^7+0*n^6,强行让它有8个项。”


2. 多项式的乘法

十分简明易懂的FFT(快速傅里叶变换)_路人黑的纸巾的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/enjoy_pascal/article/details/81478582/【高精度乘法下两种多项式表示法的区别】

FFT:快速傅里叶变换与高精度乘法_傅里叶变换的精度_ljhandlwt的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ljhandlwt/article/details/51999762

 根据上面这的内容,当处理两个多项式的乘法时:

  1. 使用FFT求出两个多项式f和g在相同n个点x1~xn的值表示【注:n根据以下两点确定,1. 这个n本意是k的阶数;2. 这个n要“强行”表示为2的整数次幂】
  2. 点值相乘(xi, f(xi))×(xi, g(xi))→(xi, f(xi)*g(xi))得到多项式的点值表示(又称时域相乘)
  3. 使用IFFT将多项式k的点值表示转换回系数表示,从而得到多项式的乘积k(x)

结合以上图像的分析,可以看出这样的多项式乘积求取方法的时间复杂度只需O(nlogn)


3. 大整数乘法

FFT:快速傅里叶变换与高精度乘法_傅里叶变换的精度_ljhandlwt的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/ljhandlwt/article/details/51999762【多项式乘法与高精度乘法】

正如上面所讲的:任意一个整数可以表示成一个多项式的一个特殊取值(10,十进制思想)

  • 设一个n位大整数在按位次可以表示成N=a_{n-1}\ldots a_1a_0,则令A(x)=a_0+a_1x+\ldots+a_{n-1}x^{n-1},就有N=A(10)

从而,我们仅仅需要:

  1. 将大整数按位次写成对应的多项式
  2. 再用上面快速傅里叶变换求多项式的想法求多项式的乘积
  3. 最后把乘积多项式按照系数的阶数写回整数位次

就得到了大整数的乘法!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值