为什么合并排序的递归树的级别总数是lg n + 1?

时间:2013-10-29 07:43:13

标签: performance algorithm recursion mergesort

我认为这个问题在这里是非常明显的,但我正在查看“算法简介”第3版第37页,它说图2.5中递归树的总级数是lg n + 1但是我不明白你为什么要+1。任何人都可以解释这背后的理由吗?感谢

3 个答案:

答案 0 :(得分:1)

树应包含N片叶子。级别为h的二叉树(根级别为1)最多有2 ^(h-1)个叶子,因此我们断言2 ^(h-1)> = n,即h> = lg(n) +1。同时它应该是一个完整的二叉树。具有级别h的完整二叉树将至少具有(2 ^(h-2)+1)个叶子,即2 ^(h-2)+ 1 <= n,h <= lg(n-1)+2

当n = 2 ^ k,k + 2> h> = k + 1,所以h = k + 1 = lg(n)+1,就是书中的情况。

此外,当n!= 2 ^ k时,将存在k,其中2 ^ k> n> 2(k-1),我们具有h> = lg(n)+ 1> k且h <1。 lg(n)+2&lt; k + 2,即h = k + 1 = ceil(lg(n)+1)。

总之,k = ceil(lg(n)+1)。其中ceil(lg(n)+1)表示不小于lg(n)+1的最小整数。

答案 1 :(得分:0)

假设N等于8.那么,我们有4个级别:

1. full array with size 8.
2. halves with size 4.
3. quarters with size 2.
4. eighths with size 1.

那是lg n + 1. lg 8 = 3. lg 8 + 1 = 4.

答案 2 :(得分:0)

我已经详细解释了如何使用递归树计算mergesort的复杂性,看看它here