修改的合并排序的Big O分析(除以√n数组,而不是2)

时间:2018-09-23 22:50:17

标签: runtime big-o mergesort

我正在研究一种修改后的合并排序算法,该算法使用了类似的过程来合并两个排序的数组,但是我想合并√n个大小的√n个排序数组。它将从大小为n的数组开始,然后如上所述将其递归分为√n个子问题。使用以下算法:

np.timedelta64

我相当确定这是正确的算法,但是我不确定如何找到Big O运行时间。任何朝着正确方向的指导都将不胜感激!

1 个答案:

答案 0 :(得分:1)

关键部分是发现合并步骤的复杂性。假定使用与2路情况类似的方法:

  • 从所有√n数组中查找最小元素是O(√n)
  • 需要对所有n元素进行合并;某些阵列耗尽时可能出现的边缘情况只会使复杂度减去O(√n)

因此,合并的复杂度为O(n√n)。扩大复发范围:

enter image description here

(*)标志着T()术语的扩展。发现第m次展开的模式:

  • T项的系数为n的幂和,直至1/2的幂。
  • m项的参数是T的幂的1/2
  • 累积项m乘以1的幂+ n的幂直至1/2

将上述规则写成紧凑系列:

enter image description here

  • m使用了几何级数的标准公式。
  • (*)请注意,对于(**)的幂的总和,最高的功率占主导地位(n)。假设停止条件是一些小的常数,例如1/2

enter image description here

请注意,随着n = 1的增加,n一词也消失了。因此,第一项从上方受2^(1 - ...)的限制,而第二项则将其遮盖。

  

O(n)方式的合并排序的时间复杂度因此为√n,比2方式的合并方式的O(n^1.5)复杂度要差。