矩阵 - 矩阵乘法

时间:2012-11-20 08:36:33

标签: c

我正在写一个包含矩阵乘法的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];

2 个答案:

答案 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用于较大矩阵。

理论上还有其他算法渐进地表现得更好,但除非你进行非常大的矩阵乘法,否则我认为它不会有那么大的帮助。