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

How to calculate space complexity of function A when A calls function B in for loop?

本文关键字:函数 何计算 计算 空间复杂度 循环 for 调用      更新时间:2023-10-16

我很好奇当 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;
}
}

这两种情况有什么区别?(当然如果有区别(

循环(如图所示(不会增加空间复杂性。 在循环的每次迭代中,都会分配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²(。