一些关于FFT和优化多项式操作的资料(持续更新)

本文详细介绍了快速傅里叶变换(FFT)的基本概念、性质及其在优化多项式操作中的应用,包括如何通过FFT计算多项式乘法,并探讨了在实数系数情况下更高效的优化方法,减少了计算次数。
摘要由CSDN通过智能技术生成

声明和一些性质

本文中 i , j i,j i,j只作为循环变量用,并不表示 − 1 \sqrt{-1} 1

若无特殊说明,下文中 f ( x ) , g ( x ) f(x),g(x) f(x),g(x)均为关于 x x x的不超过 ( n − 1 ) (n-1) (n1)次的多项式, h ( x ) h(x) h(x)为关于 x x x的不超过 [ 2 ( n − 1 ) ] [2(n-1)] [2(n1)]次的多项式,且 n n n 2 2 2的正整数次幂。 f ( x ) a f(x)_a f(x)a表示多项式 f ( x ) f(x) f(x) x a x^a xa项的系数(若 f ( x ) f(x) f(x) x a x^a xa项不存在则 f ( x ) a = 0 f(x)_a=0 f(x)a=0)。

定义单位根 ω x = cos ⁡ ( 2 π x ) + sin ⁡ ( 2 π x ) − 1 \omega_x=\cos(\frac{2\pi}{x})+\sin(\frac{2\pi}{x})\sqrt{-1} ωx=cos(x2π)+sin(x2π)1 ω x = e 2 π − 1 x \omega_x=e^\frac{2\pi\sqrt{-1}}{x} ωx=ex2π1 (其中 x ∈ Z + x\in\Z_+ xZ+),它满足 ( ω x ) x = 1 (\omega_x)^x=1 (ωx)x=1 ( ω 2 x ) x = − 1 (\omega_{2x})^x=-1 (ω2x)x=1 ( ω 2 x ) 2 x − y = − ( ω 2 x ) y (\omega_{2x})^{2x-y}=-(\omega_{2x})^y (ω2x)2xy=(ω2x)y ( ω 2 x ) 2 y = ( ω x ) y (\omega_{2x})^{2y}=(\omega_x)^y (ω2x)2y=(ωx)y

定义复数 z = a + b − 1 z=a+b\sqrt{-1} z=a+b1 的共轭复数 z ‾ = a − b − 1 \overline{z}=a-b\sqrt{-1} z=ab1 。可以发现 ∀ z 1 , z 2 ∈ C , z 1 + z 2 ‾ = z 1 ‾ + z 2 ‾ 且 z 1 z 2 ‾ = z 1 ‾ × z 2 ‾ \forall z_1,z_2\in\Complex,\overline{z_1+z_2}=\overline{z_1}+\overline{z_2}且\overline{z_1z_2}=\overline{z_1}\times\overline{z_2} z1,z2C,z1+z2=z1+z2z1z2=z1×z2。对于任意单位根 ω x \omega_x ωx,有 ( ω x ) y ‾ = 1 ( ω x ) y = ( ω x ) − y \overline{(\omega_x)^y}=\frac{1}{(\omega_x)^y}=(\omega_x)^{-y} (ωx)y=(ωx)y1=(ωx)y

定义关于 x x x ( n − 1 ) (n-1) (n1)次( n ∈ Z + n\in\Z_+ nZ+)多项式 f ( x ) f(x) f(x)的离散傅里叶变换(Discrete Fourier Transform (DFT) X f ( a ) = f [ ( ω n ) a ] X_f(a)=f[(\omega_n)^a] Xf(a)=f[(ωn)a] X f ( a ) = ∑ i = 0 n − 1 ( ω n ) a i f ( x ) i X_f(a)=\sum_{i=0}^{n-1}(\omega_n)^{ai}f(x)_i Xf(a)=i=0n1(ωn)aif(x)i a ∈ Z a\in\Z aZ,但由于 ( ω n ) n + a = ( ω n ) a ( ω n ) n = ( ω n ) a (\omega_n)^{n+a}=(\omega_n)^a(\omega_n)^n=(\omega_n)^a (ωn)n+a=(ωn)a(ωn)n=(ωn)a,故一般只讨论 a ∈ ( [ 0 , n ) ∩ N ) a\in([0,n)\cap\N) a([0,n)N)的情况, a ∉ ( [ 0 , n ) ∩ N ) a\notin([0,n)\cap\N) a/([0,n)N)时需要转换到上述范围内)。同时,可得 X f × g ( a ) = X f ( a ) X g ( a ) X_{f\times g}(a)=X_f(a)X_g(a) Xf×g(a)=Xf(a)Xg(a) f ( x ) a = 1 n ∑ i = 0 n − 1 ( ω n ) − a i X f ( i ) = 1 n ∑ i = 0 n − 1 ( ω n ) ( n − a ) i X f ( i ) f(x)_a=\frac{1}{n}\sum_{i=0}^{n-1}(\omega_n)^{-ai}X_f(i)=\frac{1}{n}\sum_{i=0}^{n-1}(\omega_n)^{(n-a)i}X_f(i) f(x)a=n1i=0n1(ωn)aiXf(i)=n1i=0n1(ωn)(na)iXf(i),这个通过 X f X_f Xf f f f的过程也被称为IDFT。考虑到DFTIDFT时间复杂度差异极小,故下文讨论时间复杂度时不区分DFTIDFT

关于FFT

一般的(Radix-2 DIT(Decimation in Time))FFT

考虑将 f ( x ) f(x) f(x)拆分。令 f ( x ) = A ( x 2 ) + x B ( x 2 ) f(x)=A(x^2)+xB(x^2) f(x)=A(x2)+xB(x2)(其中 A ( x ) , B ( x ) A(x),B(x) A(x),B(x)均为关于 x x x ( n 2 − 1 ) (\frac{n}{2}-1) (2n1)次多项式),则可知
X f ( a ) = ∑ i = 0 n − 1 ( ω n ) a i f ( x ) i = ∑ i = 1 n 2 − 1 ( ( ω n ) 2 a i A ( x

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值