【发布时间】:2018-02-20 08:22:51
【问题描述】:
我的 CS 老师要求我们对此代码“添加一个小改动”,使其以 N3 - N2 的时间复杂度运行strong> 而不是普通的 N3。我一生都无法弄清楚,我想知道是否有人碰巧知道。我不认为他在谈论斯特拉森方法。 从我看的时候开始,也许它可以利用他只关心正方形(对角线)矩阵的事实。
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];
}
}
}
}
【问题讨论】:
-
您的问题非常不准确。什么是“时间复杂度”?例如。具有 N 个处理器的机器可以在 O(N^2) 时间内将矩阵相乘。运行时间取决于机器型号。传统上,矩阵算法的效率是通过对矩阵元素的算术运算来衡量的。您的老师可能希望您注意到,您可以通过将
C[i][j] = 0更改为C[i][j] = A[i][0] * B[0][j],然后使用k = 1启动内部for循环来节省N^2 个添加。在实践中,这是愚蠢的。作为循环展开优化的一部分,一个好的编译器会为你做这件事。