是否没有具有所有特定所需属性的排序算法?


22

Sorting Algorithms网站上,提出以下索赔:

理想的排序算法将具有以下属性:

  • 稳定:相同的键不会重新排序。
  • 在原地运行,需要额外空间。O(1)
  • 最坏情况键比较。O(nlg(n))
  • 最坏情况下的交换。O(n)
  • 自适应:当数据接近排序或唯一键很少时,速度最高可达O(n)

没有具有所有这些属性的算法,因此排序算法的选择取决于应用程序。

我的问题是

没有具有所有这些属性的[sorting]算法

如果是这样,为什么?这些属性的原因是什么使得它们同时无法实现?


4
它们可能只是意味着没有已知的排序算法具有所有这些属性。
Yuval Filmus 2015年

3
甚至没有一个基于比较的排序会议3&4吗?
greybeard 2015年

4
@JohnFeminella它至少需要的比较,但如何告诉我们关于交换数目什么?Ω(nlog(n))
Tom van der Zanden

2
@JohnFeminella Nitpick:“优于 ”是一个空语句。如果要讨论下限,则应使用ΩΘO(_)ΩΘ
拉斐尔

1
通过将原始元素位置添加为辅助键,可以使任何排序算法变得稳定。但是,这使其无法正常运行,因为这会占用O(n)额外的内存。
乔瓦尼·博塔

Answers:


6

WikiSortGrailSort是两个相当新的算法,可以进行稳定,最坏情况下的键比较。不幸的是,我对它们的理解不充分,无法知道它们是否接近O(n lg(n))交换或具有自适应性,因此我不知道它们是否违反了您所拥有的第四和第五条件。O(n)

通过查看WikiSort GitHub页面链接的Pok-Son Kim和Arne Kutzner的论文“基于比率的稳定就地合并”,Kim和Kutzner声称其“合并”操作为(WikiSort是Mergesort的变体),但是我不确定这是否转换为具有On交换的WikiSort。GrailSort声称速度更快(在WikiSort GitHub页面上),因此我可以想象它们很可能都具有最差情况的On交换并且具有自适应性。O(m(nm+1))O(n)O(n)

如果有人设法理解WikiSort和/或GrailSort,我将不胜感激,他们也回答了我对此的公开问题。



3

没有已知的算法可以满足所有这些特性。随着我们开发更多的排序算法,这些属性受到追捧。例如,冒泡排序(可以说是最原始的排序算法)在第一个实现中很可能不稳定,但由于计算机科学家试图使其在以后的实现中更有效,因此它被设计为稳定的。因此,计算机科学家很可能从最佳算法中选择了最佳特征,因此,您列出了所有这些理想特征的清单。实际上,很难在所有方面拥有世界上最好的。并非没有可能,但是对于我们当前的体系结构来说可能并非不可能。

OΩΘ


1
欢迎!很好,但是我看不到稳定性与效率有什么关系:这是一个优先选择,即具有相同键的列表部分不应被算法“随机”排列。
David Richerby

是的,但是事实证明是可能的还是不可能的?
James Faulcon '16

1

(尽管这是一个老问题,但我还是偶然发现了它,其他人也可能发现了。)

确实有一种算法可以满足(1)-(4)和(5)的后半部分,因此非常接近上述要求。它在[1]中进行了描述,并结合了过去几十年中发明的几种技巧。

[1]:Franceschini,G.理论计算系统(2007)40:327. https://doi.org/10.1007/s00224-006-1311-1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.