【发布时间】: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] < size和arr2[arr1[i]] == i时,数字i在集合中。这个想法是你可以在arr1中的任意位置写入,并使用arr2来确认arr1中的位置是否已写入。
标签: algorithm time-complexity analysis