【问题标题】:Difference between dutch flag pr0blem and sorting荷兰国旗 pr0blem 和排序之间的区别
【发布时间】:2015-07-04 17:51:14
【问题描述】:

我正在阅读Dutch national flag problem,但我不明白:为什么这与简单的排序问题不同?

我的意思是:如果我们将 0 分配给红色,将 1 分配给白色,将 2 分配给蓝色并进行标准的快速排序或其他什么......为什么我不能得到正确的答案?

我错过了什么吗?

【问题讨论】:

    标签: algorithm sorting language-agnostic


    【解决方案1】:

    荷兰国旗问题只是更一般的排序问题的一个特例,其中唯一允许的元素是 0、1 和 2。您完全可以使用标准排序算法来解决它。

    这个问题本身很有趣,部分原因是历史原因,但主要是因为找到稳定、时间效率 (O(n)) 和空间效率 (O(1)) 的解决方案具有挑战性。很容易获得这三个属性中的两个的解决方案,但是获得所有三个属性是(我相信)一个悬而未决的问题。它还可以作为开发快速排序和使用重复键分区的算法的场所;您可以将 0、1 和 2 视为小于枢轴、等于枢轴并大于枢轴,并且您基本上可以对重复元素进行快速排序。

    希望这会有所帮助!

    【讨论】:

    • 对我来说,有趣的是有一个就地 O(n) 解决方案。 (确实,它并不稳定。但就地 O(n) 不适用于“标准排序”)
    • @gen-y-s 对不起,我应该让我的答案更清楚。在我的第二段中,我希望在 O(n) 时间、O(1) 空间和稳定的情况下传达这一点,我们有针对这三个属性中的任何两个属性的算法,但不是同时存在所有三个属性。我会去更新答案以使其更清楚。
    • 由于可能的键数量很少,您似乎仍然错过了适合非比较排序的这个问题的具体点。这就是为什么像快速排序这样的“标准”排序算法与这个问题无关(“开发”分区算法也不相关)。
    • @gen-y-s 哦,我很清楚这一点。我认为这从问题陈述中已经足够明显了。 :-)
    • 那你为什么说“你完全可以使用标准排序算法解决它”???并且“这个问题很有趣......主要是因为找到稳定、省时和节省空间的解决方案具有挑战性”,这是一个完全通用的短语,可以用于任何问题(实际上这个问题并没有那么具有挑战性)并且没有提到关于非比较排序算法的要点???很明显,提出这个问题的人不知道非比较排序,以及这个问题与常规排序相关问题的不同之处。
    【解决方案2】:

    在这个问题中,要排序的项目的值范围很小。在这种情况下,可以使用非比较排序(例如计数排序)对数组进行排序。非比较排序算法可以在 O(n) 内进行排序,即比快速排序等常规比较排序算法更快。

    【讨论】:

      猜你喜欢
      • 2018-10-26
      • 2012-06-28
      • 2011-05-04
      • 2017-05-11
      • 1970-01-01
      • 2022-11-19
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多