我的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];
}
}
}
}
答案 0 :(得分:3)
您无法在 O(N 2 )中实现矩阵乘法。但是,您可以从 O(N 3 )提高复杂性。在线性代数中,有一些算法,如Strasens算法,通过减少每个2x2子所需的乘法次数,将时间复杂度降低到 O(N 2.807 ) -matrix从8到7.
Coppersmith Winograd算法是最快的已知矩阵乘法算法,具有最佳时间复杂度 O(N 2.3729 )。