zed*_*dai 20 algorithm time-complexity matrix-multiplication
我想出了这种矩阵乘法算法.我在某处读到矩阵乘法的时间复杂度为o(n ^ 2).但我认为我的算法会给出o(n ^ 3).我不知道如何计算嵌套循环的时间复杂度.所以请纠正我.
for i=1 to n
for j=1 to n
c[i][j]=0
for k=1 to n
c[i][j] = c[i][j]+a[i][k]*b[k][j]
Run Code Online (Sandbox Code Playgroud)
小智 42
使用线性代数,存在比天真O(n 3)实现更好复杂性的算法.Solvay Strassen算法通过将每个2x2子矩阵所需的乘法次数从8减少到7 来实现O(n 2.807)的复杂度.
最快的已知矩阵乘法算法是Coppersmith-Winograd算法,其复杂度为O(n 2.3737).除非矩阵很大,否则这些算法不会导致计算时间的巨大差异.实际上,使用并行算法进行矩阵乘法更容易,更快捷.
Don*_*oby 20
天真的算法,就像你在注释中所指出的那样,你得到的是O(n ^ 3).
确实存在可以减少这种情况的算法,但是您不太可能找到O(n ^ 2)实现.我认为最有效实施的问题仍然存在.
有关更多信息,请参阅此维基百科有关Matrix Multiplication的文章.
Sea*_*wen 11
将m×n矩阵乘以n-by-p矩阵的标准方法具有复杂度O(mnp).如果所有这些对你来说都是"n",那就是O(n ^ 3),而不是O(n ^ 2).编辑:在一般情况下它不会是O(n ^ 2).但是对于特定类型的矩阵,有更快的算法 - 如果你了解更多,你可能会做得更好.
| 归档时间: |
|
| 查看次数: |
94189 次 |
| 最近记录: |