【问题标题】:Is stable and in-place the same?稳定和就地一样吗?
【发布时间】:2013-12-20 22:42:46
【问题描述】:

在谈论算法时。我看到了对就地和稳定排序算法的描述。说算法是稳定的和说它就地一样吗?如果不是,有什么区别?

【问题讨论】:

  • 示例 - 标准 quick-sort 就地且不稳定。
  • 我不认为快速排序是就地的,它需要 O(logn) 额外的存储空间。
  • in-place 术语 herehere 的非常好的细节。

标签: algorithm sorting


【解决方案1】:

不,

稳定的算法意味着“相等”元素的相对顺序在算法执行后保持不变。

例如,如果你有一个数组

{-2, 4, 5, -11, 9, -10} 

并且您想对其进行排序,以使所有负面元素都排在正面元素之前。并且您希望 -ve 和 +ve 元素的相对顺序保持不变

{-2, -11, -10, 4, 5, 9} 

这是一个稳定算法的输出

如 cmets 中所述,就地算法意味着该算法不需要输入数据以外的额外空间。输出是数据在内存中占据与输入数据相同的位置,并且输入数据被销毁。

【讨论】:

  • 就地不需要额外的空间,尽管使用 O(N) 额外空间通常会破坏就地的意义。而“额外”只是一个相对术语。
  • 感谢您的澄清。
  • 就地排序算法的空间复杂度通常为 O(N),因为序列本身必须在内存中。输入大小为 N 的 O(1) 空间复杂度算法的一个示例是最大元素算法,它依次检查每个元素,但不需要任何数据结构来包含所有元素。
【解决方案2】:

稳定意味着输入元素的顺序保持不变,除非需要更改以满足要求。应用于相等元素序列的稳定排序不会改变它们的顺序。

就地意味着输入和输出占用相同的内存存储空间。没有将输入复制到输出,除非您制作了备份副本,否则输入将不复存在。这是一个通常需要命令式语言来表达的属性,因为纯函数式语言没有存储空间或覆盖数据的概念。

【讨论】:

    【解决方案3】:

    不,不一样。

    稳定 排序是这样一种排序,对于比较相等的元素,它们在排序输出中的相对位置保证与源中的相同。将此与不稳定的排序进行对比,其中比较相等的项目将以不可预测的顺序出现在排序结果中。这种区别在简单的情况下并不重要(例如,对整数进行排序),但当排序标准只是每个项目包含的数据的一部分时(例如,仅按尺寸对彩色袜子进行排序),它就变得很重要。

    就地排序是一种无需额外空间即可对输入进行排序的方法;它也被称为“破坏性”排序,因为在排序后您丢失了输入数据的未排序形式(它已被排序数据替换)。

    【讨论】:

    • 很好的类比(替代术语)要记住 - destructive sort
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多