【问题标题】:Lowed bound for sorting by comparison通过比较排序的下限
【发布时间】:2011-08-30 05:01:58
【问题描述】:

今天我正在阅读 Julienne Walker 关于排序的一篇很棒的文章 - Eternally Confuzzled - The Art of Sorting,有一件事引起了我的注意。我不太明白作者证明通过比较排序我们受限于 Ω(N·log N) 下限的部分

下限不那么明显。大多数排序算法的最低可能界限是 Ω(N·log N)。这是因为大多数排序算法使用项目比较来确定项目的相对顺序。任何通过比较排序的算法都将具有 Ω(N·log N) 的最小下限,因为比较树用于选择已排序的排列。可以轻松构建三个数字 1、2 和 3 的比较树:

                         1 < 2

           1 < 3                       1 < 3

   2 < 3           3,1,2       2,1,3           2 < 3

1,2,3   1,3,2                            2,3,1     3,2,1

注意每个项目是如何与其他项目进行比较的,并且每条路径都会导致三个项目的有效排列。树的高度决定了排序算法的下限。因为必须有尽可能多的排列才能使算法正确,所以比较树的最小可能高度是 log N!,相当于 Ω( N·log N).

这似乎是一个非常合理的直到我不太明白的最后一部分(粗体) - 如何记录 N!相当于Ω(N·log N)。我一定是错过了 CopmSci 课程中的某些内容,无法进行最后一次转换。如果我们使用比较排序,我期待在此方面寻求帮助或获得其他证据的链接,以证明我们受到限制 Ω(N·log N)。 p>

【问题讨论】:

    标签: algorithm sorting big-o


    【解决方案1】:

    您没有错过 CompSci 课程的任何内容。你错过的是数学课。斯特林近似的维基百科页面显示 log n!是渐近 n log n + 低阶项。

    【讨论】:

      【解决方案2】:
      • 不!
      • ∴ 日志 N!
      • ∴ 日志 N!

      有了这个,你可以证明 θ(log N!) = O(N log N)。证明 Ω 相同,留给读者作为练习,或者留给mathematics stackexchange 或theoretical computer science stackexchange 的问题。

      【讨论】:

      • 但是这种不平等的方向是错误的。您要确保 log(N!) > (增长速度与 O(n log n) 一样快的东西)。您需要证明任何基于比较的算法必须至少进行这么多的比较。
      • 正如我所说,“证明 Ω 的相同是留给读者的练习”,并且在给出提示后,将 OP 推荐给与该主题更相关的 stackexchanges。跨度>
      【解决方案3】:

      我最喜欢的证明是非常基本的。

      N! = 1 * 2 * .. * N - 1 * N

      我们可以通过假设这些产品的前半部分不存在,然后假设后半部分都只是 N/2 来获得一个非常简单的下限。

      (N/2)^(N/2)

      log((N/2)^(N/2) = N/2 * log(N/2) = N/2 * (log(N) - 1) = O(n log n)

      所以即使你只取表达式的后半部分,并假设所有这些因素都不大于 N/2,你仍然在 O(n log n) 的范围内获得下限,这太棒了初级。我可以说服一个普通的高中生。我自己连斯特林公式都推不出来。

      【讨论】:

      • 非常好的“封底”方法,人人都该知道
      猜你喜欢
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 2014-11-25
      • 1970-01-01
      • 2018-12-12
      相关资源
      最近更新 更多