C ++ - Big-O表示法

时间:2010-10-06 23:47:40

标签: c++ big-o

由于某种原因我无法解决这个问题。 什么是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];
    }

4 个答案:

答案 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来计算操作次数,然后丢弃不太重要的术语(如果有的话)......