【问题标题】:Why is merge sort's worst case still n log n?为什么合并排序最坏的情况仍然是 n log n?
【发布时间】:2013-05-04 17:14:02
【问题描述】:

这是我之前参加的期末考试的一个问题,我不知道如何回答。

原来如此

什么是合并排序的最坏情况运行时,但更重要的是,为什么?

【问题讨论】:

标签: mergesort


【解决方案1】:

分而治之贡献了一个 log(n) 因子。您将数组分成两半 log(n) 次,每次这样做时,对于每个段,您都必须对两个排序数组进行合并。合并两个排序数组是 O(n)。该算法只是遍历两个数组,然后遍历滞后的一个。

【讨论】:

  • 谢谢!我说无论如何它都会分而治之。我不知道我会得到多少(如果有的话)积分。
【解决方案2】:

你得到的递归是 r(n) = O(n) + r(roundup(n/2))+r(rounddown(n/2). 问题是由于四舍五入,你不能使用 Masters Theorem 来解决这个问题。因此,您可以进行数学运算或使用类似 hack 的解决方案。如果您的输入不是两个数字的幂,则“将其炸毁”。然后你可以在 r(n) = O(n) + 2r(n/2) 上使用 master 定理。显然这会导致 O(nlogn)。函数 merge() 本身在 O(n) 中,因为在最坏的情况下您需要进行 n-1 次比较。

【讨论】:

    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2018-02-18
    相关资源
    最近更新 更多