对于MakeMatrix,显示T(n)为O(n)且S(n)为O(n ^ 2),其创建方阵并仅将对角线元素设置为零。 (无视malloc的时间)
MakeMatrix(size):
A = malloc(size * size * sizeof(int))
for i from 0 to size -1
A[i,i] =0
return A
我想我明白为什么T(n)是线性O(n),因为只有1个for循环,但为什么空间复杂度为O(n ^ 2)?
答案 0 :(得分:0)
您分配size * size * sizeof(int)
。在我看来,尺寸*大小使空间复杂度n^2
变得非常明显。空间复杂性意味着您需要多少内存,具体取决于输入的大小。这是size * size
。
答案 1 :(得分:0)
n 大小矩阵中元素的数量为 n 2 。
如果int的大小是4个字节,那么在malloc调用中,您将划出 size * size * 4 个字节。因此,空间要求是二次的。
即使您只迭代 size 元素(即仅对角元素),但您已为所有 size 2 元素。