Algorithm 关于FFT的澄清
我知道下面的推理有问题,但我不确定是什么 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
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)
time(通过将向量嵌入零中)B
toB'=(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的程度。只是认为这是通向启蒙的道路上的绊脚石。