堆数据结构

时间:2010-03-22 14:19:05

标签: binary-heap

试着想一下say的位置的下限,即max-heap中第n个最大的键。假设堆在数组中布局。上限的min(2 ^ n-2,数组大小-1)我认为,但它总是低于0?

1 个答案:

答案 0 :(得分:0)

问题的初步调查揭示了n与下界和上界之间的以下关系(假设堆中有14个元素)

n   lb  up
1   1   1
2   2   3
3   2   7
4   2   14
9   3   14
10  4   14
12  5   14
13  6   14
14  8   14

要确定可能大于堆数组特定位置中元素的元素数,请计算以该位置为根的子树的大小。然后这两个数字通过公式

相关联
# of elements possible larger  = total number of elements - size of subtree - 1 

编辑: 请注意,计算是向后执行的。给定数组/堆中的位置,可以确定堆排序时值的位置。给定节点,堆可以分为三个分区:

  1. 保证大于当前元素的元素(父元素,父元素,...)
  2. 保证小于当前元素(以当前元素为根的子树)的元素
  3. 其余元素可以大于或小于当前元素。
  4. 如果我们查看包含14个元素的示例堆并想要确定第6个位置中可能值的范围,则组如下:

    • 第1组包含两个元素(3,1)
    • 第2组包含两个元素(12,13)
    • 第3组包含剩余的9个元素(不包括当前值)(2,4,5,7,8,9,10,11,14)

    因此下限为3(第一组中的元素数+ 1),而上限为11(第一组中的元素数+第三组中的元素数+ 1)。