你说得对,“快速傅里叶变换”只是 任何 算法的名称,它在 O(n log n) 时间内计算离散傅里叶变换,并且有几种这样的算法。
这是我认为的 DFT 和 FFT 的最简单解释,以及小 N 的示例,这可能会有所帮助。 (请注意,还有其他解释和其他算法。)
离散傅里叶变换
给定N 数字 f0、f1、f2、...、fN-1,DFT 给出了一组不同的N 数字。
具体来说:设 ω 是 1 的原始 N 次根(在复数或某些有限域中),这意味着 ωN=1 但没有更小的幂是 1。您可以将 fk 视为多项式 P(x) = ∑fkxk 的系数支持>。 DFT 给出的 N 个新数 F0, F1, ..., FN-1 是评估多项式 ω 次方的结果。即对于从0到N-1的每一个n,新的数Fn为P(ωn) = ∑ 0≤k≤N-1 fkωnk.
[选择ω的原因是逆DFT的形式很好,与DFT本身非常相似。]
请注意,天真地找到这些 F 需要 O(N2) 次操作。但是我们可以利用来自我们选择的 ω 的特殊结构,这允许我们在 O(N log N) 中完成。任何这样的算法都称为快速傅里叶变换。
快速傅里叶变换
所以这是进行 FFT 的一种方法。我将用 2N 替换 N 以简化符号。我们有 f0, f1, f2, ..., f2N-1,我们想要计算 P(ω0), P(ω1), … P(ω2N-1) 在这里我们可以写出
P(x) = Q(x) + ωNR(x) 与
Q(x) = f0 + f1x + … + fN-1xN-1
R(x) = fN + fN+1x + … + f2N-1x2N- 1
现在这就是事情的美妙之处。观察到 ωk+N 处的值与 ωk 处的值非常简单相关:
P(ωk+N) = ωN(Q(ωk) + ωNR(ω k)) = R(ωk) + ωNQ(ωk)。所以 Q 和 R 在 ω0 到 ωN-1 的评估就足够了。
这意味着您的原始问题——在 2N 个点 ω0 到 ω2N-1 处评估 2N 项多项式 P——已简化为两个问题评估 N 项多项式 Q 和 R 在 N 个点 ω0 到 ωN-1。所以运行时间 T(2N) = 2T(N) + O(N) 等等,得到 T(N) = O(N log N)。
DFT 示例
请注意,其他定义将因数设为 1/N 或 1/√N。
对于N=2,ω=-1,(a,b)的傅里叶变换为(a+b, a-b)。
对于N=3,ω为1的复立方根,(a,b,c)的傅里叶变换为(a+b+c,a+bω+cω2 , a+bω2+cω)。 (因为 ω4=ω。)
对于N=4和ω=i,(a,b,c,d)的傅里叶变换为(a+b+c+d, a+bi-c-di, a-b+c-d, a-bi-c+di)。特别是,您问题中的示例:(1,0,0,0) 上的 DFT 给出 (1,1,1,1),也许不是很有启发性。