【问题标题】:The space complexity is always the lower bound of the time complexity [closed]空间复杂度始终是时间复杂度的下限[关闭]
【发布时间】:2020-02-28 18:08:29
【问题描述】:

我的书指出,对于具有 T(n) 时间复杂度和 S(n) 空间复杂度的代码,以下语句成立: T(n) 是欧米茄(S(n))。 我的问题是:为什么这个说法成立?

【问题讨论】:

  • 因为分配空间需要时间。
  • 因为这样想。要创建 n^2 元素的数组,它至少需要 n^2 时间。因此,任何时候您都无法在恒定时间O(1) 中分配例如n 元素。因此空间复杂度总是时间复杂度的下限。
  • 请记住,空间复杂度不包括输入占用的空间。 (例如,对数组的二分查找具有对数时间复杂度,但空间复杂度为常数。)
  • 严格来说,如果您正在编写非常低级的代码(即不是 Python),允许在不先将其清零的情况下请求内存,那么您可以编写使用“更多空间”的算法比时间”。在 John Bentley 的 Programming Pearls 中的一个早期练习中有一个很好的例子,使用两个未初始化的数组来表示一组整数;当且仅当arr1[i] < sizearr2[arr1[i]] == i 时,数字i 在集合中。这个想法是你可以在arr1中的任意位置写入,并使用arr2来确认arr1中的位置是否已写入。

标签: algorithm time-complexity analysis


【解决方案1】:

我们说的是顺序算法。

那么空间复杂度 S(n) 意味着算法以某种方式检查每个 S(n) 个不同的内存位置至少一次。为了访问这么多内存位置,顺序算法需要 Ω(S(n)) 时间。

【讨论】:

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