在Big O表示法中,您如何考虑对其他方法的调用?

时间:2014-04-02 23:26:38

标签: c++ big-o

假设我们有两种方法:

void example(int p){
    p += 10;
    p = exampleTwo(p);
}

int exampleTwo(int p){
    int pp = 0;
    for(int i = 0; i < p; i++){
        pp++;
    }
    return pp;
}

方法exampleTwo具有线性运行时。它的运行时间是O(n)。

那么,方法example的大O符号是什么,考虑到它调用exampleTwo

我想它也是O(n),但我不确定。

2 个答案:

答案 0 :(得分:5)

对于子程序,您应该将顺序乘以其调用次数的顺序。例如,如果函数被称为O(n)次,并且在O(log n)时间内运行,则总顺序为O(n log n)。

答案 1 :(得分:3)

example()没有循环,它对exampleTwo()没有任何额外作用,因此它具有相同的复杂度顺序,即O(n),为exampleTwo()


如果example()更改为:

int example(int p){
  int sum = 0;
  for(int i=0; i<p; ++i){
    sum += exampleTwo(p);
    }
  return sum;
}

然后复杂性现在为O(n²):随着p越大,要做的工作量会增加p的平方。