在每次迭代中创建数组的循环的最差 space 复杂度是多少
What's the worst space complexity of a loop which create an arrayat each iteration
我正在努力寻找最差 space 复杂度的正确定义,无论它是所用算法总量的总和,还是仅是算法消耗的 space关键时候,最坏的时候。
举个例子:
void myFunc(n) {
for(int j = 0; j < n ; ++j) {
int* myTab = malloc(n*sizeof(int));
for(int i = 0; i < n; ++i) {
myTab[i] = 1;
}
free(myTab);
}
}
第一个定义大致为 O(N²)
,第二个定义为 O(N)
。
应该是O(n)
。分配完成后,您将明确释放内存。我同意 malloc
的内部工作原理是有用的,但假设一个正常的实现不会使用足够的内存来改变 space 复杂性(为了跟踪 O(n)
内存分配它保持 O(n^2)
大量的元数据 - 只是一个奇怪的例子)。
一个有趣的观点,澄清你的想法。如果注释掉此 free(..)
行,则 space 复杂度将为 O(n^2)
。这就是所谓的内存泄漏。
我正在努力寻找最差 space 复杂度的正确定义,无论它是所用算法总量的总和,还是仅是算法消耗的 space关键时候,最坏的时候。
举个例子:
void myFunc(n) {
for(int j = 0; j < n ; ++j) {
int* myTab = malloc(n*sizeof(int));
for(int i = 0; i < n; ++i) {
myTab[i] = 1;
}
free(myTab);
}
}
第一个定义大致为 O(N²)
,第二个定义为 O(N)
。
应该是O(n)
。分配完成后,您将明确释放内存。我同意 malloc
的内部工作原理是有用的,但假设一个正常的实现不会使用足够的内存来改变 space 复杂性(为了跟踪 O(n)
内存分配它保持 O(n^2)
大量的元数据 - 只是一个奇怪的例子)。
一个有趣的观点,澄清你的想法。如果注释掉此 free(..)
行,则 space 复杂度将为 O(n^2)
。这就是所谓的内存泄漏。