【问题标题】:How recursion reduces the time complexity in merge sort递归如何降低归并排序的时间复杂度
【发布时间】:2021-08-04 01:52:41
【问题描述】:

据我了解,时间复杂度是通过计算随着输入大小的增加而增加的操作数得出的。

在归并排序中,有 2 个阶段。

  1. 将输入数组分成更小的数组
  2. 对这些数组进行排序和合并

根据视频讲座,为合并排序划分数组的时间复杂度为O(log n)

但这里他指的不是计算时间复杂度的操作次数,而是解压次数或调用递归函数的次数。

*他使用递归来划分数组。

纯粹就伪代码而言,在这种情况下,递归所占用的操作不止n

相反,此代码始终采用n 操作;

function divide(arr){
    for (let i = 0; i < arr.length; i++) {
        arr[i] = [arr[i]];
   }
}

那么递归代码的复杂度如何小于循环呢?

【问题讨论】:

    标签: time-complexity mergesort


    【解决方案1】:

    递归不会降低时间复杂度。您已经展示了自上而下合并排序的图表。对于原始的自底向上归并排序,代码将包含 n 个元素的数组视为大小为 1 的 n 次运行,以 O(1) 时间复杂度来划分数组。

    大多数库都使用混合插入排序和自底向上合并排序的一些变体。自上而下的归并排序主要用于学术目的。

    【讨论】:

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