优先队列学习随记

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次比较和恒定的额外空间。

猜你喜欢

转载自www.cnblogs.com/yzl12666/p/9212340.html
今日推荐