【问题标题】:Time complexity and Space complexity, how to account for space complexity时间复杂度和空间复杂度,如何考虑空间复杂度
【发布时间】:2016-10-13 00:07:03
【问题描述】:

对于 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)?

【问题讨论】:

  • 因为您仍然必须将整个矩阵存储在内存中,所以 O(n^2)。
  • 请使用正确的格式...“MakeMatrix(size) A = malloc(sizesizesizeof(int)) for i from 0 to size -1 A[i,i] =0 return A”相当不可读。

标签: algorithm time big-o complexity-theory space


【解决方案1】:

您分配size * size * sizeof(int)。在我看来很明显 size * size 使得空间复杂度n^2。空间复杂度意味着您需要多少内存,具体取决于输入的大小。这里是size * size

【讨论】:

    【解决方案2】:

    大小为n的矩阵的元素个数为n2

    如果 int 的大小是 4 个字节,那么在 malloc 调用中,您将切出 size * size * 4 个字节。因此空间需求是二次方的。

    即使您仅迭代 size 元素(即仅对角元素),但您已为所有 size2保留空间> 元素。

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 2016-02-13
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      相关资源
      最近更新 更多