由于某种原因我无法解决这个问题。 什么是Big-o符号
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)
for (int i = 0; i < n; i++) // N times
for (int j = 0; j < n; j++) { // N times (
c[i][j] = 0; // Constant plus
for (int k = 0; k < n; k++) // N times
c[i][j] += a[i][k] * b[k][j]; // Constant
} // )
或O( n · n ·(1 + n ·1)),相当于O( n <折叠常量操作后,/ i>· n · n )或O( n 3 )。
答案 1 :(得分:2)
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];
}
它看起来像是O(n^3)
,因为它有3级循环。
答案 2 :(得分:2)
答案是:O(n ^ 3)
因为最外面的循环执行N次 对于该循环中的每个元素,中间循环执行N次 对于中间循环中的每个元素,最内部循环执行N次。
总循环是N * N * N = N ^ 3
此语句执行N ^ 2次c[i][j] = 0;
但与执行N ^ 3次的最内层语句相比无关紧要。
答案 3 :(得分:0)
解决这个问题的方法是用n
来计算操作次数,然后丢弃不太重要的术语(如果有的话)......