关于FFT的澄清

时间:2009-11-12 19:14:18

标签: algorithm fft matrix-multiplication

我知道以下推理有问题,但我不确定它是什么。

FFT:

  1. 给出两个多项式

    A = a_0 + a_1 x + a_2 x^2 + ... + a_n x^n

    B = b_0 + b_1 x + b_2 x^2 + ... + b_n x^n

    您可以计算产品的系数

    AB = \sum _k = 0 ^ 2n ( \sum _ j = 0 ^ k (a_j b_{k-j}))x^k

    O(n log n )时间。

  2. 因此我们可以计算两个向量(a_0, ..., a_n)(b_0, ..., b_n)   v_i = \sum j = 0 ^ k ( a_j b_{k-j})时间内的向量O(n log n)(通过将向量嵌入零中。)

  3. 鉴于上述情况,我们应该能够通过预处理其中一个来计算A =(a_0, ..., a_n)B =(b_0, ..., b_n) A.B = \sum_j=0 ^ n a_j b_j O(n log n)的点积。向量说BB' = (b_n, b_{n-1}, ..., b_1, b_0),然后在O(n log n)时间内计算卷积。

  4. 如果上述推理是正确的,那么这意味着我们可以通过在nxn时间O(n^2 log n )计算点积来在O(n log n)时间内实现两个O(n)矩阵的矩阵乘法次。

    然而,我们知道矩阵乘法的最佳运行时间大约是O(n^2.4)所以这似乎不太可能是正确的,这可能意味着步骤1,2或3是不正确的。

2 个答案:

答案 0 :(得分:4)

产品中有n^2个条目,而不是n,因此此算法为O(n^2 * n * log n) = O(n^3 log n)

计算点积的最佳算法是O(n),而不是O(n log n)。这就是为什么矩阵乘法的朴素算法是O(n^3)。 (这是n^2点产品,可以在O(n)时间内完成。

答案 1 :(得分:2)

我想知道为什么在步骤3中你可以在O(n log n)时间内计算点积,因为众所周知点积可以在O(n)时间内计算出来?步骤2看起来像线性时间而不是O(n log n)步骤?

关于O(n ^ 2 log n)的结论也不符合逻辑。您不能将点积O(n)乘以AB矩阵 - 据我所知您必须采用O(n ^ 2)点积,导致(根据您的分析)O(n ^ 3 log n)不如标准O(n ^ 3)。这是因为你的奇怪的O(n log n)点积结果。