我正在研究一种修改后的合并排序算法,该算法使用了类似的过程来合并两个排序的数组,但是我想合并√n个大小的√n个排序数组。它将从大小为n的数组开始,然后如上所述将其递归分为√n个子问题。使用以下算法:
np.timedelta64
我相当确定这是正确的算法,但是我不确定如何找到Big O运行时间。任何朝着正确方向的指导都将不胜感激!
答案 0 :(得分:1)
关键部分是发现合并步骤的复杂性。假定使用与2路情况类似的方法:
√n
数组中查找最小元素是O(√n)
。n
元素进行合并;某些阵列耗尽时可能出现的边缘情况只会使复杂度减去O(√n)
。因此,合并的复杂度为O(n√n)
。扩大复发范围:
(*)
标志着T()
术语的扩展。发现第m
次展开的模式:
T
项的系数为n
的幂和,直至1/2
的幂。m
项的参数是T
的幂的1/2
。m
乘以1的幂+ n
的幂直至1/2
。将上述规则写成紧凑系列:
m
使用了几何级数的标准公式。(*)
请注意,对于(**)
的幂的总和,最高的功率占主导地位(n
)。假设停止条件是一些小的常数,例如1/2
:请注意,随着n = 1
的增加,n
一词也消失了。因此,第一项从上方受2^(1 - ...)
的限制,而第二项则将其遮盖。
O(n)
方式的合并排序的时间复杂度因此为√n
,比2方式的合并方式的O(n^1.5)
复杂度要差。