【问题标题】:Why the total number of levels of the recursion tree of a merge sort is lg n + 1?为什么归并排序的递归树的总层数是lg n + 1?
【发布时间】:2013-11-08 06:19:57
【问题描述】:

我认为这里的问题是不言自明的,但我正在查看“算法简介”第 3 版第 37 页,它说图 2.5 中递归树的总层数为 lg n + 1,但我不明白你为什么要+1。谁能解释一下这背后的理由?谢谢

【问题讨论】:

  • 尝试通过输入 n = 2 或 4 来检查有效性。
  • 这不是合并排序特定的......顺便说一句,这本书稍后会证明这一点,请继续阅读。

标签: performance algorithm recursion mergesort


【解决方案1】:

我已经在视觉上详细解释了如何使用递归树计算归并排序的复杂度,看看here

【讨论】:

    【解决方案2】:

    这棵树应该包含 N 个叶子。层次为h的二叉树(根为1级)最多有2^(h-1)个叶子,所以我们断言2^(h-1) >= n,即h >= lg(n)+1 .同时它应该是一个完整的二叉树。具有 h 级的完整二叉树至少有 (2^(h-2)+1) 个叶子,即 2^(h-2)+1

    当n=2^k,k+2>h>=k+1,所以h=k+1=lg(n)+1,书上就是这样。

    而且,当n!=2^k时,会有ak,其中2^k>n>2(k-1),我们有h>=lg(n)+1>k和h

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

    【讨论】:

      【解决方案3】:

      假设 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。

      【讨论】:

      • 与图中的树匹配吗?
      猜你喜欢
      • 2014-08-12
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2011-02-16
      • 2016-03-12
      • 1970-01-01
      • 2017-01-14
      相关资源
      最近更新 更多