Algorithm 关于FFT的澄清

Algorithm 关于FFT的澄清,algorithm,fft,matrix-multiplication,Algorithm,Fft,Matrix Multiplication,我知道下面的推理有问题,但我不确定是什么 FFT: 给定两个多项式 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\u k=0^2n(\sum\uj=0^k(a\u j b{k-j}))x^k 在O(n日志n)时间中 因此,给定两个向量(a_0,…,a_n)和(b_0,…,b_n),我们可以计算 向量v_i=\sum j=0^k(a_j b_{k-j})inO(n log n)tim

我知道下面的推理有问题,但我不确定是什么

FFT:

  • 给定两个多项式

    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\u k=0^2n(\sum\uj=0^k(a\u j b{k-j}))x^k

    O(n日志n)
    时间中

  • 因此,给定两个向量
    (a_0,…,a_n)
    (b_0,…,b_n)
    ,我们可以计算 向量
    v_i=\sum j=0^k(a_j b_{k-j})
    in
    O(n log n)
    time(通过将向量嵌入零中)

  • 鉴于上述情况,我们应该能够通过预处理其中一个向量,即
    B
    to
    B'=(B_n,B_n),计算
    A=(A_0,…,A_n)
    A.B=\sum_j=0^n A_j B_j
    的点积,即
    O(n log n)
    时间
    然后计算卷积,如图2所示。在
    O(n日志n)
    时间中

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


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

    乘积中有
    n^2
    项,而不是
    n
    ,因此这个算法应该是
    O(n^2*n*logn)=O(n^3 logn)


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

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


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

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


    关于O(n^2 logn)的结论也不符合逻辑。你不能取点积O(n)次,结果是AB矩阵——据我所知,你必须取O(n^2)点积,导致(根据你的分析)O(n^3对数n),低于标准O(n^3)。这是因为你奇怪的O(n对数n)点积结果

    我想知道为什么在步骤3中可以在O(n logn)时间内计算点积是一项成就,因为众所周知,点积可以在O(n)时间内计算?第2步看起来也是线性时间,而不是O(n logn)步


    关于O(n^2 logn)的结论也不符合逻辑。你不能取点积O(n)次,结果是AB矩阵——据我所知,你必须取O(n^2)点积,导致(根据你的分析)O(n^3对数n),低于标准O(n^3)。这是因为你奇怪的O(n对数n)点积结果

    第(3)步从B到B'的转换的运行时间是多少?第(3)步从B到B'的转换的运行时间是多少?@gmatt:你不应该。大多数人甚至没有达到他们生命中学习FFT的程度。只是认为这是通向启蒙的道路上的绊脚石。大多数人甚至没有达到他们生命中学习FFT的程度。只是认为这是通向启蒙的道路上的绊脚石。