【问题标题】:How to Understand Time Complexity Expression for Merge Sort如何理解归并排序的时间复杂度表达式
【发布时间】:2019-11-13 14:34:07
【问题描述】:

对不起,这个问题可能是一个新程序员(我自己:)提出的愚蠢问题。从以下链接: https://www.geeksforgeeks.org/analysis-algorithm-set-4-master-method-solving-recurrences/ 归并排序的时间复杂度为 T(n) = 2*T(n/2) + cn

这是我的问题:

  1. 2*T(n/2) 表示花费在:“分而治之”过程中的左边部分(从索引0到索引中间)和右边部分(从索引中间+1到n的最后一个元素) ) 的 n 个输入,对吗?
  2. cn 表示花费在以下方面的时间:n 个输入的“征服”过程,因为我们需要遍历所有 n 个输入才能将它们按正确的顺序排列,对吗?

【问题讨论】:

  • 对我来说很合适。事实上,这就是它如何得出它属于第 2 类的结论,这会给您带来 nlogn 复杂性。
  • 非常感谢卡洛斯

标签: algorithm mergesort


【解决方案1】:

T(n) = 2*T(n/2) + cn 是理想时间与元素个数的关系。在这种情况下,它适用于自上而下和自下而上的合并排序。可以表示为:

T(2m) = 2*T(m) + 2cm   (2c is a constant, so it could just be ... + cm)

所以用文字来说明这一点,排序 2m 个元素所需的时间是排序 m 个元素所需的时间加上合并 2m 个元素所需的时间的 2 倍。对于合并部分,移动次数始终为 2m,但比较次数范围为 m 到 2m-1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-22
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2021-08-09
    • 2017-04-03
    • 1970-01-01
    相关资源
    最近更新 更多