这是一个功能,我想了解它的空间复杂性:
void func_test(int n)
{
int *p;
for (int i=0; i<=n; i++)
{
p=malloc(sizeof(int)*i);
for (int j=0; j<i; j++) *(p+j)=j; //just to insert some numbers to p
free(p);
}
return;
}
我知道我总共分配了sizeof(int)* n ^ 2个字节,但是在我分配了一个内存之前我没有&#34; free&#34;它。 那么,空间复杂度是O(n ^ 2)还是O(1)?
谢谢,Tamir。
答案 0 :(得分:3)
它是O(n)。您永远不会分配超过保留n ints
所需的空间。原因正是因为你所说的。您可以在每次迭代中释放内存。记忆与时间不同,可以回收利用。