合并排序的时间复杂度

时间:2012-10-12 10:17:29

标签: algorithm merge

为什么自上而下合并排序的最佳情况的时间复杂度在O(nlogn)中? 我认为自上而下合并排序的最佳情况是1,只需要比较1次。 在最坏情况下,最佳情况和平均情况下自下而上合并排序的时间复杂度如何。

还有一个问题是为什么每次迭代都需要O(n)?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:5)

  

为什么自顶向下合并排序的最佳情况的时间复杂性在于   O(nlogn)?

因为在每次迭代时您将数组拆分为两个子列表,并以递归方式调用算法。在最好的情况下,您将它完全拆分为一半,因此您将问题(每个递归调用)减少到原始问题的一半。您需要log_2(n)次迭代,每次迭代都需要O(n)(每次迭代都在所有子列表中,总大小仍为n),因此总共O(nlogn)

但是,通过简单的预处理来检查列表是否已经排序 - 它可以缩减为O(n)

由于检查列表是否已排序本身为O(n) - 因此无法在O(1)中完成。请注意,“最佳情况”是一般n的“最佳情况”,而不是特定尺寸。

  

在最坏的情况下,自下而上合并排序的时间复杂度怎么样,   最佳案例和平均案例。

同样的方法可以给你O(n)最佳情况自下而上(简单的预处理)。自下而上合并排序的最坏情况和最佳情况是O(nlogn) - 因为在这种方法中,列表总是被划分为2个等长(最多差异1)列表。