我正在尝试编写一些代码来预测在给定的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))
?
答案 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相同。因此,计算复杂性是相同的。