时间复杂度为O( n )的算法的空间复杂度是否为O( n 2 )或更多?
答案 0 :(得分:4)
空间复杂度不能超过时间复杂度,因为写X空间单位需要Omega(X)时间。
答案 1 :(得分:4)
查看DSPACE和DTIME组,它们表明可以在哪个时间/空间复杂度中执行哪种算法,以及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)
要回答您可能要问的问题:通常,会计是这样的,即分配给定数量的内存需要一定比例的时间。为什么?实际上,在使用它之前需要初始化内存。
或者,如果你假设你的所有内存都是预先初始化的,那么在你的程序全部写完后就不会出现这种情况;之后仍然需要清理内存......
算法分析中实际上有多种处理器模型;如果你愿意,你可以指定一个模型,说“预先归零的内存是免费的,你不必自己清理”,这会为稀疏使用内存的算法产生不同的度量。但是,在实践中,内存分配和垃圾收集不是免费的,因此该指标的实际相关性有限。