CLRS Chapter 6
介绍
主要为 Binary Heap,分为 max-heap 和 min-heap,以 max-heap 为例
从上往下二叉而下,Parent 一定大于 Children,Children 之间不可比
Index 为从上到下,从左到右
特性
- n-element height = ⌊lgn⌋
和 Memory 中的 heap 区分
- 维护 Heap 由两部分组成
maxHeapify
- recursively find largest among the three and move the largest up, then do the same thing to make sure it fit in the right position
- Top down
buildMaxHeap
- bottom up iteration to up, starting from the leaf’s parent.
- Bottom up
- Used in heap sort
heap sort
- 建立最大堆(堆顶的元素大于其两个儿子,两个儿子又分别大于它们各自下属的两个儿子… 以此类推)
- 将堆顶的元素和最后一个元素对调(相当于将堆顶元素(最大值)拿走,然后将堆底的那个元素补上它的空缺),然后让那最后一个元素从顶上往下滑到恰当的位置(重新使堆最大化)。
- 重复第2步。
- MacKay也提供了一个修改版的堆排:每次不是将堆底的元素拿到上面去,而是直接比较堆顶(最大)元素的两个儿子,即选出次大的元素。由于这两个儿子之间的大小关系是很不确定的,两者都很大,说不好哪个更大哪个更小,所以这次比较的两个结果就是概率均等的了。具体参考这里。