朴素矩阵乘法改进

时间:2017-09-12 01:59:06

标签: java c++ algorithm matrix

我的CS老师要求我们对此代码“添加一些小改动”,使其以 N 3 - N 2 的时间复杂度运行而不是正常 N 3 。我不能为我的生活搞清楚,我想知道是否有人碰巧知道。我不认为他在谈论strassens方法。 从我看它时,也许它可以利用他只关心方形(对角线)矩阵的事实。

void multiply(int n, int A[][], int B[][], int C[][]) {
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            C[i][j] = 0;
            for (int k = 0; k < n; k++)
            {
                C[i][j] += A[i][k]*B[k][j];
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您无法在 O(N 2 中实现矩阵乘法。但是,您可以从 O(N 3 提高复杂性。在线性代数中,有一些算法,如Strasens算法,通过减少每个2x2子所需的乘法次数,将时间复杂度降低到 O(N 2.807 -matrix从8到7.

Coppersmith Winograd算法是最快的已知矩阵乘法算法,具有最佳时间复杂度 O(N 2.3729