优先队列学习随记
Posted yzl12666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优先队列学习随记相关的知识,希望对你有一定的参考价值。
1.优先队列:一种支持删除最大元素和插入元素两种操作的数据结构。
2.当一颗二叉树的每个结点都大于等于它的两个子结点时,它被称为堆有序。
3.根结点是堆有序的二叉树中的最大结点。
4.二叉堆是一组能够用堆有序的完全二叉树排序的元素,并在数组中按照层级储存(不使用数组的第一个位置)。
5.在一个二叉堆中,位置k的结点的父结点的位置为k/2(向下取整),而它的两个子结点的位置则分别为2k和2k+1.
6.一颗大小为N的完全二叉树的高度为lgN(向下取整)。
7.对于一个含有N个元素的基于堆的优先队列,插入元素操作只需不超过(lgN+1)次比较,删除最大元素的操作需要不超过2lgN次比较。
8.用下沉操作由N个元素构造堆只需要少于2N次比较以及少于N次交换。
9.用下沉操作由N个元素构造堆只需要少于2N次比较以及少于N次交换。
10.堆排序代码:
1 public static void sort(Comparable[] a) 2 { 3 int N = a.length; 4 for (int k = N/2; k >= 1; k--) 5 sink(a,k,N); 6 7 while (N > 1) 8 { 9 exch(a,1,N--); 10 sink(a,1,N); 11 } 12 }
11.将N个元素堆排序,堆排序只需少于(2NlgN+2N)次比较(以及一半次数的交换)。
12.堆排序在排序复杂性的研究中有着重要的地位,它是我们所知的唯一能够同时最优地利用空间和实践的方法------在最坏的情况下它也能保证使用~2NlgN次比较和恒定的额外空间。
以上是关于优先队列学习随记的主要内容,如果未能解决你的问题,请参考以下文章