5

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

  • 如果算法分配一些额外的内存来计算结果
  • 如果一个算法有一个非常量的递归调用,它们占用了堆栈上的额外空间
4

2 回答 2

2

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

维基百科走得更远,说额外的存储量是恒定的。但是,使用 log(n) 额外空间将输出写入输入的算法(例如合并排序)在我见过的用法中仍然存在。

于 2014-10-10T00:28:40.157 回答
1

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

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

以“插入排序”排序算法的就地实现为例。输入是一个占据 Θ(n) 空间的数字列表。在最坏的情况下运行需要 Θ(n 2 ) 时间,但只需要 O(1) 空间。如果您不进行就地排序,则至少需要使用 Ω(n) 空间,因为输出需要是 n 个数字的列表。

于 2014-10-10T00:23:43.723 回答