算法(第4版)-2.4 优先队列
定义:一种支持删除最大元素和插入元素的数据结构。 经典实现:基于二叉堆数据结构。 2.4.1 API 1. 只要我们能够高效地实现insert()和delMin(),下面的优先队列用例中调用了MinPQ的TopM就能使用优先队列解决这个问题。 2.4.2 初级实现 1. 数组实现(无序): 修改pop(),先交换再删除,相当于选择排序(个人认为)。 -> 惰性方法 2. 数组实现(有序): 修改insert(),每次插入后保证最大值在栈的顶部。 -> 积极方法 3. 链表表示法: 用基于链表的下压栈的代码作为基础,选择上面二者之一实现。 4. 优先队列的各种实现在最坏情况下运行时间的增长数量级 数据结构 插入元素 删除最大元素 有序数组 N 1 无序数组 1 N 堆 logN logN 理想情况 1 1 2.4.3 堆的定义 1. 堆有序:一棵二叉树的每个结点都大于等于它的两个子结点。 2. 根节点是堆有序的二叉树中的最大结点。 3. 二叉堆是一组能够用堆有序的完全二叉树排序的元素,并在数组中按照层级储存(不使用数组的第一个位置)。 4.* 在一个堆中,位置k的结点的父结点的位置为⌊k / 2⌋,而它的两个子结点的位置则分别为2k和2k + 1。 5. 一棵大小为N的完全二叉树的高度为⌊lgN⌋。 2.4.4 堆的算法 1. 理解上浮(swim)和下沉(sink)。 2. 插入元素