“就地”到底意味着什么?

时间:2014-10-10 00:17:25

标签: algorithm semantics in-place

我知道还有其他关于"就地"的含义的问题。算法,但我的问题有点不同。我知道这意味着算法会更改原始输入数据,而不是为输出分配新空间。但我不确定的是辅助内存是否重要。即:

  • 如果算法分配一些额外的内存以计算结果
  • 如果算法具有非常数的递归调用,这会占用堆栈上的额外空间

2 个答案:

答案 0 :(得分:2)

就地通常意味着线性附加空间。这不一定是该术语含义的一部分。只是使用线性或更大空间的就地算法并不令人感兴趣。如果您要分配O(n)空间来计算与输入相同的空间中的输出,您可以同样轻松地在新鲜内存中生成输出并保持相同的内存限制。原地计算的价值已经丢失。

维基百科更进一步说the amount of extra storage is constant。但是,在我看到的用法中,使用log(n)额外空间在输入上写入输出的算法(比如mergesort)仍在原地。

答案 1 :(得分:1)

我想不出任何不需要某些额外内存的就地算法。算法是否“就地”的特征如下:

  

就地:通过将输入变为输出,使用o(f(n))额外空间对大小为Θ(f(n))的输入执行算法。

举例说明“插入排序”排序算法的就地实现。输入是取Θ(n)空间的数字列表。在最坏的情况下运行需要Θ(n 2 )时间,但它只需要O(1)空间。如果你不进行就地排序,那么 required 至少要使用Ω(n)空间,因为输出必须是n个数字的列表。

相关问题