当A在for循环中调用函数B时,如何计算函数A的空间复杂度?

时间:2018-10-17 09:09:19

标签: c++ time-complexity space space-complexity

当A在for循环中调用函数B时,我很好奇如何计算函数A的空间复杂度和辅助空间。让我们描述两个例子:


情况1:什么是函数A的空间复杂度和辅助空间

void A(int k) {
    int c = 25;
    for (int i = 0; i < k; i++) {
        B();
    }
}

void B () {
   int d = 5;
}

情况2:什么是函数A的空间复杂度和辅助空间

void A(int k) {
  int c = 25;
  for (int i = 0; i < k; i++) {
     int d = 25;
  }
}

这两种情况有什么区别? (当然会有区别)

1 个答案:

答案 0 :(得分:2)

循环(如图所示)不会增加空间复杂性。在循环的每次迭代中,B的堆栈帧都会被分配,然后被丢弃。 B不在内部分配内存,因此其空间消耗为O(1),A也是如此。

如果代码如下:

std::vector<int> B(int i) {
    std::vector<int> result(i);
    // Do something with result;
    return result;
}

void A(int k) {
    std::vector<std::vector<int>> storage;
    for (int i = 0; i < k; i++) {
        storage.push_back(B(i));
    }
}

然后我们可以看到,函数B的每次调用都分配O(k)空间,它被称为O(k)次,因此A的空间复杂度为O(k²)。