【问题标题】:Proof that the height of a balanced binary-search tree is log(n)证明平衡二叉搜索树的高度为 log(n)
【发布时间】:2013-01-26 16:48:55
【问题描述】:

二分查找算法需要 log(n) 时间,因为树(有 n 个节点)的高度为 log(n)。

你会如何证明这一点?

【问题讨论】:

标签: performance tree binary-search-tree


【解决方案1】:

现在我不是在给出数学证明。尝试使用log to base 2来理解问题。log2是计算机科学中log的正常含义。

首先,了解它是二进制对数 (log2n)(以 2 为底的对数)。 例如,

  • 1的二进制对数为0
  • 2的二进制对数是1
  • 3的二进制对数是1
  • 4的二进制对数是2
  • 5、6、7的二进制对数是2
  • 8-15的二进制对数是3
  • 16-31的二进制对数为4,以此类推。

对于每个高度,完全平衡树中的节点数为

高度节点日志计算 0 1 对数21 = 0 1 3 对数23 = 1 2 7 对数27 = 2 3 15 对数215 = 3

考虑一个具有 8 到 15 个节点(任意数量,比如 10)的平衡树。它总是高度 3,因为从 8 到 15 的任何数字的 log2 都是 3。

在平衡二叉树中,每次迭代要解决的问题的大小减半。因此,大约需要 log2n 次迭代才能获得大小为 1 的问题。

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我们首先假设这棵树是完整的——它有 2^N 个叶子节点。我们试图证明您需要 N 个递归步骤来进行二分搜索。

    在每个递归步骤中,您将候选叶节点的数量精确地减少了一半(因为我们的树是完整的)。这意味着经过 N 次减半操作后,只剩下一个候选节点。

    由于我们的二分搜索算法中的每个递归步骤都恰好对应一个高度级别,因此高度正好是 N。

    对所有平衡二叉树的泛化:如果树的节点数少于 2^N,我们肯定不需要 更多 减半。我们可能需要更少或相同的数量,但永远不会更多。

    【讨论】:

    • 一棵完整的树只是意味着每个级别都是满的,除了可能的最低级别,必须从左到右填充。我知道叶节点只是一个没有子节点的节点。你怎么知道一棵完整的树有 2^N。一棵空树在技术上是一棵完整的树。一棵空树的高度为 0,这意味着根据该等式,一棵空树将有 2^0 或 1 个叶节点。但是根据空树的定义,树将没有节点。你能详细说明一下吗?
    • 我会通过归纳证明 N 层的完整二叉树有 2^N 个叶节点。洞察力是,添加另一个级别会将 2 个节点附加到每个现有叶节点,因此使新叶的数量增加一倍。您可以通过在证明中添加一个关于空树的特殊情况或从证明义务中排除这种情况来解决对空树的担忧。
    • 你的意思是一个完整且完美平衡的二叉搜索树吗?导致二叉搜索树,按顺序遍历 (0,1,empty) 是完整的,因为它在除最后一层外的每一层都被填充,从上到右填充但它只有一个叶子节点,这不会同意到你的 2^N 公式
    • 想象一棵只在叶节点保存数据的树。在这种情况下,2^N 公式成立。如果我们将数据放在内部节点中,则 2^N 公式最多偏离 2 倍,这与渐近 O(log N) 行为无关。节点总数增长为 1+2+4+8+... 即 (2^(N-1)-1)。这个证明有点复杂,但很容易理解并看到 O(log N) 属性成立。
    【解决方案3】:

    假设我们有一个完整的树可以使用,我们可以说在深度 k 处有 2k 个节点。您可以使用简单的归纳法来证明这一点,基于这样的直觉:向树添加额外的层级会使整个树中的节点数增加上一层节点数乘以 2。

    树的高度 k 是 log(N),其中 N 是节点数。这可以表述为

    log2(N) = k,

    等价于

    N = 2k

    为了理解这一点,这里有一个例子:

    16 = 24 => log2(16) = 4

    树的高度和节点的数量是指数相关的。记录节点数量的日志只是让您可以向后工作以找到高度。

    【讨论】:

    • 你的意思是一棵完整的树?
    • 答案是完全错误的。如果log2(N) = k 那么对于N = 1 我们有k = 0,但k 是1,在这种情况下不是0
    【解决方案4】:

    只需查看 Knuth,第 3 卷 - 搜索和排序算法中的严格证明......他比我能想到的任何其他人都严格得多。

    http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming

    您可以在任何优秀的计算机科学图书馆和许多(非常)老极客的书架上找到它。

    【讨论】:

    • 谢谢!作为参考,这是第 453 页上的定理 A(第 6.2.3 章平衡树)。该定理指出,具有 n 个内部节点的平衡树(AVL 树)的高度以 log_2 (n + 1) 为界,以 1.4404 log_2 (n + 2) - 0.328 为界。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多