【问题标题】:Calculating average case complexity of Quicksort计算快速排序的平均案例复杂度
【发布时间】:2017-04-24 04:08:36
【问题描述】:

我正在尝试使用递归关系为 QuickSort 的最差/最佳/平均情况计算 big-O。我的理解是你的实现效率取决于分区函数的好坏。

最坏情况:枢轴总是让一侧为空

  • T(N) = N + T(N-1) + T(1)
  • T(N) = N + T(N-1)
  • T(N) ~ N2/2 => O(n^2)

最佳情况:枢轴平均划分元素

  • T(N) = N + T(N/2) + T(N/2)
  • T(N) = N + 2T(N/2) [主定理]
  • T(N) ~ Nlog(N) => O(nlogn)

平均案例:我很困惑如何表示递归关系或如何处理它。

我知道 Quicksort 的 平均情况 big-O 是 O(nlogn) 我只是不确定如何推导出它。

【问题讨论】:

  • 我猜,最好的情况不是 O(nlogn)。最好的情况是排序数组作为输入,在这种情况下,复杂度似乎更低
  • 显然平均情况是 O(nlogn)
  • 所以我在想最好的分区函数,它将元素分成相等的两半。我同意最好的情况输入是一个排序数组。
  • 关于我的第一条评论,我的错误,比较排序的复杂度不能小于 O(nlogn)。我猜平均情况和最佳情况之间的区别在于计算常数不包含在最终的大哦符号中,因此最后它们看起来是相同的

标签: recursion time-complexity big-o quicksort recurrence


【解决方案1】:

当你选择支点时,你能做的最坏的事情是 0 | n,你能做的最好的就是 n/2 | n/2。一般情况下,你会发现你得到了类似 n/4 | 的拆分。 3n/4,假设均匀随机性。将其插入,一旦消除常量,您将得到 O(nlogn)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多