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