时间复杂度与空间复杂度的关系

时间:2011-08-22 17:25:39

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

时间复杂度为O( n )的算法的空间复杂度是否为O( n 2 )或更多?

5 个答案:

答案 0 :(得分:4)

空间复杂度不能超过时间复杂度,因为写X空间单位需要Omega(X)时间。

答案 1 :(得分:4)

查看DSPACEDTIME组,它们表明可以在哪个时间/空间复杂度中执行哪种算法,以及relationship between groups

所有使用O(n)时间的算法都在DTIME(n)组中。 所有使用O(n ^ 2)空间的算法都在DSPACE(n ^ 2)组中。 由于DTIME(n) <= NTIME(n) <= DSPACE(n) < DSPACE(n^2),因此每个O(n)时间的算法也是O(n ^ 2)空间。

答案 2 :(得分:2)

由于所有O(n)函数都是简单的O(n 2 )(参见例如Wikipedia on Big O notation),答案是肯定的。

答案 3 :(得分:0)

Big-O符号处理上限,从技术上讲,算法是O(g(n)),对于任何和所有g(n),其生长速度比f(n)快,所以如果算法是O(n) )它必须是O(n ^ 2)和O(n ^ 99)。

Little-o符号处理今晚的上限,即增长最快的函数集,其增长速度快于f(n)。因此,如果f(n)为o(n),则无效f(n)为o(n ^ 2)。

编辑(回答评论):

如果给出算法A并且被可靠地告知A是O(n ^ 2)那么A有可能是O(n)(或其他),但你必须分析A来找出自己。相反,如果可靠地告诉A是o(n ^ 2),则它不能是O(n)。

答案 4 :(得分:0)

要回答您可能要问的问题:通常,会计是这样的,即分配给定数量的内存需要一定比例的时间。为什么?实际上,在使用它之前需要初始化内存。

或者,如果你假设你的所有内存都是预先初始化的,那么在你的程序全部写完后就不会出现这种情况;之后仍然需要清理内存......

算法分析中实际上有多种处理器模型;如果你愿意,你可以指定一个模型,说“预先归零的内存是免费的,你不必自己清理”,这会为稀疏使用内存的算法产生不同的度量。但是,在实践中,内存分配和垃圾收集不是免费的,因此该指标的实际相关性有限。