MAX-HEAPIFY
概述
MAX-HEAPIFY 是维护 二叉堆 最大堆性质的核心原语,输入为数组 和下标 ,假设以 和 为根的子树已经是最大堆,但 可能违反最大堆性质,通过让 在堆中”逐级下降”来恢复最大堆性质。
定义
MAX-HEAPIFY(A, i)
输入:数组 和下标 ,其中以 和 为根的两棵子树都是最大堆,但 可能小于其子节点。
过程:
- 设 ,。
- 在 、、 中找到最大值,记其下标为 。
- 若 ,交换 与 ,然后递归地对 调用 。
时间复杂度:,其中 为堆中元素个数。
核心性质
递归关系式
设 为 MAX-HEAPIFY 在一个大小为 的堆上的运行时间。在最坏情况下,每次递归调用处理的子树大小至多为 (当底层恰好半满时),因此:
由主定理可得 。
核心原语地位
MAX-HEAPIFY 是所有堆操作的核心构建块:
- BUILD-MAX-HEAP:自底向上对每个非叶节点调用 MAX-HEAPIFY。
- 堆排序:在 BUILD-MAX-HEAP 之后反复调用。
- 优先队列 的 EXTRACT-MAX 操作:取出堆顶后调用 MAX-HEAPIFY 恢复堆性质。
迭代版本
MAX-HEAPIFY 可以改写为迭代(循环)版本,避免递归调用的开销,逻辑等价但常数因子更优。
章节扩展
第6章:堆排序
MAX-HEAPIFY 是堆排序算法中维护堆性质的关键步骤。在排序过程中,每次将堆顶元素与末尾交换后,需要对新的堆顶调用 MAX-HEAPIFY 来恢复最大堆性质。
第6章:建堆
BUILD-MAX-HEAP 通过从最后一个非叶节点到根节点,依次调用 MAX-HEAPIFY 来构建最大堆。