快速傅里叶变换学习笔记

快速傅里叶变换

学习这个很久了,由于网上没有为初学者写的详细的教程,走了很多弯路。特此写一篇文章。特此写一篇文章。

考虑两个多项式f(x)=i=0naixi,g(x)=i=0nbixi,如果我们得到他们的卷积h=fg,直接用系数表示进行计算的话,时间复杂度为O(n2)的。因此,我们考虑用点值表示法。也就是说,如果我们知道

f(x)={(x1,y1),(x2,y2)(xn,yn)}

g(x)={(x1,y1),(x2,y2)(xn,yn)}

就可以得到

h(x)={(x1,y1y1),(x2,y2y2)(xn,ynyn)}

这样做就变成O(n)了。

那么现在问题变成了如何求得f的点值表示?这里我们就需要用到快速傅里叶变换。我们考虑对f(x)进行变形 ,为了叙述方便,我们假设多项式的项数n满足n=2k1,kZ,不足的项系数为0

f(x)=i=0naixif(x)=i=0n12a2i+1x2i+1+i=0n12a2ix2if(x)=xi=0n12a2i+1x2i+i=0n12a2ix2i

我们假设

G(x)=i=0n12a2i+1x2iH(x)=i=0n12a2ix2i

那么有

f(x)=xG(x2)+H(x2)

假设ωn为单位复根,即ωn满足

ωnn=1

那么有

DFT(f(ωnk))=ωnkDFT(G(ωn2k))+DFT(H(ωn2k))DFT(f(ωnk))=ωnkDFT(G(ωn2k))+DFT(H(ωn2k))

同理

DFT(f(ωnn2+k))=ωnkDFT(G(ωn2k+n))+DFT(H(ωn2k+n))DFT(f(ωnn2+k))=ωnkDFT(G(ωn2k))+DFT(H(ωn2k))

至此,我们完成了计算。一共O(logn)层,每层处理O(n),时间复杂度O(nlogn)

posted @   ZQYang  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示
主题色彩