【发布时间】:2021-11-17 23:54:16
【问题描述】:
一个递归函数,它初始化一个占用 n^2 空间以及 n 堆栈空间的空 2D 向量。
void s (int n)
{
if(n == 0) return;
// n^2 space
vector<vector<int>> a(n, vector<int>(n));
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
a[i][j] = i * j;
s(n-1);
}
【问题讨论】:
-
a未使用,int的构造没有可见的副作用,因此任何体面的编译器都会完全丢弃a。 -
由于调用
s没有可观察到的行为,算法的空间和时间复杂度可以说是O(0),因为理论上它可以被优化出来。它什么也没做。 -
我们不考虑任何编译器优化,我添加了一个嵌套循环,因此
S现在有一些可观察到的行为。现在的空间复杂度是多少?
标签: c++ algorithm space-complexity