合并排序中的级别数是多少?

时间:2019-05-12 02:33:59

标签: sorting mergesort

我对合并排序中的层数(树的高度)感到困惑。

在某些地方我可以看到它被赋予了$ \ log {2} {n} $的上限函数,但是在它被写成的地方是$ \ log {2} {n} + 1 $

谁能解释什么是正确的方法。

1 个答案:

答案 0 :(得分:0)

当n不为2的幂时,需要使用上限函数来处理这种情况。

答案

How come the height of recursion tree in merge sort lg(n)+1

具有误导性,因为二叉树中的每个节点都由一个值和两个链接(两个都可能为空)组成,而递归自顶向下合并排序中的每个堆栈帧都由0个值和两个索引,迭代器或指针。

对于公式,是否可以检查调用者进行的子数组大小== 1的基本情况,包括初始调用,例如

    if(end-begin > 1) call mergesort();

则公式为堆栈帧级别数=上限(log2(n))。

如果仅在mergesort的顶部检查基本情况,则公式为堆栈帧级别数= 2 + ceiling(log2(n))。考虑n = 7的情况,如果您包括对mergesort的初始调用,则共有5个级别的堆栈帧。通过自上而下的合并排序,递归将继续进行,直到子数组大小减小到一个元素的基本大小,在这种情况下,它将返回:

level
1                           0,6
2             0,3                         3,6
3      0,1          1,3             3,4          4,6
4      ret       1,2   2,3          ret       4,5   5,6
5                ret   ret                    ret   ret