Chap24 Heaps and Priority Queues
- priority queue is queue where each item has an associated priority, and the next item returned from the queue is the one with the highest priority
- heap – 能够有效访问其最大(或最小)元素的数据结构。enqueue和dequeue O(lg(N)),peek O(1)
1 Heap Concepts
- 堆是一棵complete binary tree,遵循堆排序规则。完整二叉树是指除最后一层外的每一层都有尽可能多的节点,最后一层是从左到右填充的树
- 2种堆排序规则
- max-heap,每个节点都比它的子节点大
- min-heap,每个节点都比它的子节点小
1.1 Insertion
- 插入时,首先将新项放置在树中下一个可用的位置(底部最左边的打开槽位,或者如果底部已满,则放置新层的第一个槽位)。然后,通过“冒泡”节点来修复堆顺序(同时保持堆的完整性)。将节点与其父节点进行比较,如果违反了堆顺序,则交换这两个节点。然后,对位于其新位置及其新父节点重复该过程。这个过程将继续进行,直到节点相对于其父节点(确保整个堆的顺序正确)或节点到达根节点为止
- O(lg(N)) --> 因为只在初始插入的路径上进行交换指向根,其长度必须为O(lg(N))
- 树的高度确定是lg(N+1)
1.2 Deletion
- 将根的位置与最后一行最右边的元素交换。现在,可以删除根元素,仍然保持树的完整性。但必须修复堆的顺序,将该节点从堆中取出ÿ