为什么自上而下合并排序的最佳情况的时间复杂度在O(nlogn)中? 我认为自上而下合并排序的最佳情况是1,只需要比较1次。 在最坏情况下,最佳情况和平均情况下自下而上合并排序的时间复杂度如何。
还有一个问题是为什么每次迭代都需要O(n)?有人可以帮忙吗?
答案 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)列表。