【问题标题】:What is the real name of median sort and/or where can I find more material on it中位数排序的真名是什么和/或我在哪里可以找到更多关于它的材料
【发布时间】:2010-08-23 03:46:54
【问题描述】:

我正在阅读由 O'Reilly Media 出版的 Algorithms in a Nutshell 一书,我正在阅读排序算法部分,并找到了一本名为 Median Sort 的书。由于我以前从未听说过它,而且我的 CS3 教科书(涵盖算法)没有列出它,我用谷歌搜索它并尝试在 Wikipedia 上查找它,但一无所获。如果有人可以提供名称,我将不胜感激,我可以轻松地在下面查找算法或将我指向有关它的其他资源。谢谢。

此外,从我对算法的了解来看,它本质上是快速排序,只是它总是使用中值作为基准。中值是指它似乎扫描项目数组并选择中间值作为枢轴,而不是选择数组中的中间项目作为枢轴。此外,书中还提到了与“中位数”排序相关的 Blum-Floyd-Pratt-Rivest-Tarjan (BFPRT)。

【问题讨论】:

    标签: algorithm sorting


    【解决方案1】:

    大多数版本的快速排序选择(例如)三个元素(通常是第一个、中间和最后一个)的中值,给出通常所说的中值 3 快速排序。仅以中间元素作为枢轴开始通常不符合除快速排序之外的任何名称。

    编辑(很多稍后,在看到问题中的编辑之后):您所说的似乎是使用“中位数的中位数”算法来选择快速排序的枢轴元素.中位数算法的中位数以独立使用作为 Hoare 的 Select 算法的替代方案(或改进,取决于您的观点)而闻名。众所周知,这是在线性时间内找到中位数(或其他等级,但在这种情况下我们只关心中位数)。

    底线是 sort 实际上仍然是快速排序。 Hoare 对选择枢轴元素的描述既不要求也不禁止选择中位数的媒体:

    分区过程的第一步是选择一个特定的键值,该键值已知在要排序的段中项目的键范围内。确保这一点的一种简单方法是选择段中项目之一的实际键值。选择的键值将被称为 bound

    当然,现在几乎每个人都将其称为“枢轴”而不是“绑定”,但这几乎无关紧要。用于选择枢轴/边界的方法保持打开状态。

    【讨论】:

    • 快速排序本质上是一种更简单的中值排序,因此您部分正确。但是,这些是不同的算法。
    • @RobertD.: 是的,他在我写完答案一小时后进行了编辑,很明显他不仅仅是在谈论快速排序——但是当我写下答案时,这并不清楚一点也不。否决问题中缺陷的答案。万岁!
    • 由于我目前没有任何超能力,我不可能知道我正在“否决问题中存在缺陷的答案”。但是,我修复了错误。
    • @RobertD.:如果您查看问题的底部“已于 2010 年 8 月 23 日 5:12 编辑”,则其中的日期/时间部分是一个超链接,可让您查看问题的编辑历史。如果您查看我原始答案的日期/时间,您会发现它在编辑之前。
    【解决方案2】:

    由于我不拥有上述书籍,我会大胆猜测并说Blum-Floyd-Pratt-Rivest-Tarjan algorithm(如果您想了解更多信息,请参阅paper)可能用于枢轴选择。我还建议您阅读同一篇 Wikipedia 文章中的基于分区的一般选择算法部分,因为我认为这正是您要查找的内容。

    【讨论】:

      【解决方案3】:

      是的,你是对的,它类似于快速排序,但它比快速排序更好,因为它避免了那些你的数组被非常不成比例地划分(不等半)的情况。 因为在快速排序中,我们不能确定每次我们的数组都会被分成相等的两半或几乎相等的两半。在中位数排序中,我们通过为找到中位数付出代价来确保这一点,但这可能值得进行类似于合并排序的快速排序和就地排序的好处。

      【讨论】:

        【解决方案4】:

        我不拥有这本书,但我会猜测一下。本书所指的算法是 Floyd-Rivest 的 SELECT 算法。 Blum-Floyd-Pratt-Rivest-Tarjan (BFPRT) 参考了这篇论文,他们在其中讨论了他们早期的 PICK(现在称为 Median of medians)选择算法:

        M. Blum、R. W. Floyd、V. Pratt、R. L. Rivest、R. E. Tarjan,“选择的时间界限”,Journ。比较。和。系统。科学,卷。 7, 问题。 4,第 448-461 页,1973 年。

        本文建立了对计算机科学中选择问题的早期理解。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-28
          • 2017-08-02
          • 1970-01-01
          • 1970-01-01
          • 2021-06-12
          • 2015-09-02
          相关资源
          最近更新 更多