我正在写一个包含矩阵乘法的C代码,我正在使用3个嵌套循环进行该操作。那么,有没有人知道我们如何通过删除其中一个嵌套循环来改进代码?
for (i = 0; i < SIZE; ++i)
for (j = 0; j < SIZE; ++j)
for (k = 0; k < SIZE; ++k)
c[i][j] += a[i][k] * b[k][j];
答案 0 :(得分:3)
密集矩阵的矩阵乘法具有O(n ^ 3)。这可以通过使用Strassen's algorithm到O(n ^(2.8))或Coppersmith-Winogar到O(n ^(2.37))来加速。
答案 1 :(得分:1)
Strassen算法是一种经典的算法。
http://en.wikipedia.org/wiki/Strassen_algorithm
它比写三个循环更复杂,如果矩阵大小很小,整体速度增益可能无法显示。
据我所知,Mathematica和Matlab使用三个嵌套循环乘法用于小矩阵,并切换到Strassen用于较大矩阵。
理论上还有其他算法渐进地表现得更好,但除非你进行非常大的矩阵乘法,否则我认为它不会有那么大的帮助。