【问题标题】:What does "in-place" mean exactly?“就地”究竟是什么意思?
【发布时间】:2014-12-05 01:36:27
【问题描述】:

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

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

【问题讨论】:

  • 以上帝的名义,我在哪里要求任何“书籍、工具等......”?!
  • 我也在想同样的事情。我可以看到该问题可能由于其他原因而被关闭,但这不会请求场外资源。
  • 我认为这是一个非常好的问题——绝对不是推荐问题——但我不能投票重新打开它,抱歉。您可以考虑在聊天中询问。

标签: algorithm semantics in-place


【解决方案1】:

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

维基百科更进一步说the amount of extra storage is constant。但是,使用 log(n) 额外空间将输出写入输入的算法(例如合并排序)在我所见过的用法中仍然存在。

【讨论】:

  • 算法简介 (CLRS) 第 148 页:“回想一下,如果输入数组中只有恒定数量的元素曾经存储在数组之外,那么排序算法就会就地排序。”但在其他地方,它将递归快速排序描述为就地,尽管它使用 log n 空间作为堆栈。
  • @JeffreyBosboom 对。维基百科的文章同样令人困惑和困惑。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-12
    • 2014-10-29
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2018-07-27
    相关资源
    最近更新 更多