计算方法6 FFT

据助教说不考这么麻烦的计算,我就摸了

多项式的表示

最熟悉的是系数表示法,例如 P(x)=i=0naixi

系数表示法有它的好处:例如将 \Set1,x,x2 视为一组基时,系数恰好就是多项式在这组基下的坐标;例如对于任给的点 x 可以计算多项式的值(O(n) 次乘法)。但是在给出系数表示法后,对两个 n 次多项式很难高效算乘积(还记得天才本科生Karatsuba吗)

还可以是点值表示法。根据lagrange插值可知,一个 n 次多项式可以由 n+1 个点唯一确定。因此 P(x)=def\Set(x0,y0),(x1,y1)

此时计算 P(x)Q(x) 只需要求出 2n+1 个点值,然后将这些取值对应相乘即可得到 R(x)=P(x)Q(x) 的点值,也就唯一确定了 R(x)

因此我们希望有一种方法,对于给定的系数表示多项式 F(x),G(x),能够选取 2n+1 个点

对这 2n+1 个点做插值后得到 F(x),G(x) 的点值表示,相乘最后还原得到 F(x)G(x) 的系数表示。

这就是FFT

FFT

DFT

不妨假设多项式是 n=2k 次的

考虑方程 xn=1 的所有复数解,它们构成了复平面单位圆上等距分布的 n 个点,记为 \Setωiωin=1

选择这些点出自如下考虑:取 Ωn,那么有 Ω2n2=def\Setx2xΩ2n=Ωn。这暗示我们可以通过类似分治的算法来每次将问题的规模减小一半。并且对于 Ωn 而言,只需要其生成元 ω1=e2πn+1i 即可完全表示。

假设需要对 F(x)=i=02naixi 插值,那么记 G(x)=i=0na2ixiH(x)=i=0na2i+1xi,显然有

  1. F(x)=G(x2)+xH(x2)
  2. 原本要对 F(x)Ω2n 上插值,现在要对 G(x),H(x)Ωn 上插值

主定理算一下就是 O(nlogn) 的。

IDFT

考虑如下矩阵形式的DFT

[ω0ω0ω0ω0ω1ωnω0ωnωn2][a0a1an]=[F(ω0)F(ω1)F(ωn)]

即我们的 Ωn 是一组基,\Setan 则是基下的坐标,作用一下就能得到多项式在 Ωn 上的点值。

这个矩阵 W 非常经典,算一下行列式和逆就会发现对于IDFT的操作只需要取 ω1=ω1 做DFT即可实现逆变换,最后需要除掉一个系数 1n+1

posted @   jjppp  阅读(107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示