【问题标题】:Build Heap Procedure.构建堆过程。
【发布时间】:2018-11-29 12:29:12
【问题描述】:

一个大小为 n 的整数数组可以通过调整从节点 ⌊(n−1)/2⌋ 开始的完整二叉树的每个内部节点的堆转换为堆,并进行调整直到根节点(根节点在索引 0 处),顺序为 ⌊(n−1)/2、⌊(n−3)/2⌋、.....、0。

================================================ =============================

我知道,这是一个 Build Heap 过程,需要 O(n) 时间,但有人可以通过取一个 n 值较小的数组来让我想象一下事情是如何工作的吗?

【问题讨论】:

标签: algorithm data-structures heap


【解决方案1】:

让我们用数组[7, 3, 9, 1, 2, 4, 8, 5, 6, 0] 做一个例子。树形结构为:

         7
    3         9
  1   2     4   8
 5 6 0

堆中有 10 个项目。因此,从索引 (n/2)-1(第一个非叶节点)开始,我们看到值 2 大于它的一个子节点。我们交换,给予:

         7
    3         9
  1   0     4   8
 5 6 2

接下来,1 比它的孩子小,所以我们不管它。

9 比它的两个孩子都大。规则是你把它和它最小的孩子交换,给出:

         7
     3       4
   1   0   9   8
  5 6 2

3 比它的两个孩子都大,所以用 0 交换它。它也大于 2,所以我们再做一次交换。结果是:

         7
     0       4
   1   2   9   8
  5 6 3

最后,7 大于 0,所以我们交换它,将 0 放在根处。 7 也比它的两个孩子大,所以我们用 1 交换它。而且 7 比 5 和 6 大,所以我们把它交换到叶子级别。结果是:

         0
     1       4
   5   2   9   8
  7 6 3

这是一个有效的最小堆。

【讨论】:

  • 非常感谢您,好心的先生! :)
猜你喜欢
  • 2017-09-03
  • 1970-01-01
  • 2015-01-20
  • 2015-06-22
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
相关资源
最近更新 更多