n维快速傅立叶变换的计算复杂度?

时间:2012-09-03 13:56:28

标签: math fft big-o

我正在尝试编写一些代码来预测在给定的n维数组上执行离散傅立叶变换所需的时间,但是我很难理解n维的计算复杂性的FFT。

据我所知:

  • 长度为N的向量的1D FFT应该k*(N*log(N)),其中k是某个时间常数

  • 对于M*N矩阵,2D FFT应采用:

    N*(k*M*log(M)) + M*(k*N*log(N)) = k*M*N*(log(M)+log(N))

    因为它需要在每行和每列中采用1D FFT

这如何概括为ND案例?它是否应该是k*prod(dimensions)*sum(log(dimensions))

1 个答案:

答案 0 :(得分:13)

如果我们进一步推导出2D,那就很明显了:

N*(k*M*log(M)) + M*(k*N*log(N)) = k*M*N*(log(M)+log(N))

变为:

                                = k*M*N*(log(M*N))

对于N维(A,B,C等),复杂性为:

O( A*B*C*... * log(A*B*C*...) )

从数学上讲,除了twiddle factors不同之外,N维FFT与尺寸乘积的1-D FFT相同。因此,计算复杂性是相同的。

相关问题