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

In Big O notation, how do you factor in calls to other methods?

本文关键字:何考虑 其他 方法 调用 Big 表示      更新时间:2023-10-16

假设我们有以下两种方法:

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调用exampleTwo,方法的大O表示法是什么?

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

对于子例程,应将顺序乘以调用次数的顺序。例如,如果一个函数称为 O(n) 次,并以 O(log n) 时间运行,则总顺序为 O(n log n)。

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的平方。

相关文章: