【发布时间】:2013-05-04 17:14:02
【问题描述】:
这是我之前参加的期末考试的一个问题,我不知道如何回答。
原来如此
什么是合并排序的最坏情况运行时,但更重要的是,为什么?
【问题讨论】:
-
从反向列表开始,手动运行算法。计算您执行的操作次数。
标签: mergesort
这是我之前参加的期末考试的一个问题,我不知道如何回答。
原来如此
什么是合并排序的最坏情况运行时,但更重要的是,为什么?
【问题讨论】:
标签: mergesort
分而治之贡献了一个 log(n) 因子。您将数组分成两半 log(n) 次,每次这样做时,对于每个段,您都必须对两个排序数组进行合并。合并两个排序数组是 O(n)。该算法只是遍历两个数组,然后遍历滞后的一个。
【讨论】:
你得到的递归是 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 次比较。
【讨论】: