1 / 43
文档名称:

数据结构课件 第9章 堆与优先队列.ppt

格式:ppt   页数:43
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构课件 第9章 堆与优先队列.ppt

上传人:小猪猪 2011/11/30 文件大小:0 KB

下载得到文件列表

数据结构课件 第9章 堆与优先队列.ppt

文档介绍

文档介绍:第九章堆与优先队列
理解以集合为基础的抽象数据类型优先队列。
理解用有序字典实现优先队列的方法。
理解优先级树和堆的概念。
掌握用数组实现堆的方法。
理解以集合为基础的抽象数据类型可并优先队列。
理解左偏树的定义和概念。
掌握用左偏树实现可并优先队列的方法。
掌握堆排序算法。
11/11/2017
1
福州大学数学与计算机科学学院
9 堆与优先队列
优先队列的原型
排队上车,老弱病残者优先上车
排队候诊,危急病人优先就诊
洗相馆为顾客洗照片,加钱加急者优先洗
分时操作系统运行程序,小程序优先
贪心算法对解分量的选择,按元素的某种特征值,大(或小)的优先
在一个集合中搜索,按元素的某种特征值,大(或小)的优先
……处理或服务时只关心对象中谁的优先级最高通常的队列是一种优先队列最先到者优先级最高
11/11/2017
2
福州大学数学与计算机科学学院
9 堆与优先队列
优先队列的定义 
优先队列也是一个以集合为基础的抽象数据类型。
优先队列中的每一个元素都有一个优先级值。优先队列中元素x的优先级值记为p(x),它可以是一个实数,也可以是一个一般的全序集中的元素。优先级值用来表示该元素出列的优先级。
通常约定优先级值小的优先级高。也可以约定优先级值大的优先级高。
优先队列支持的基本运算有:
(1)Size( ):返回优先队列中元素个数。
(2)Min( ):返回优先队列中具有最小优先级值的元素。
(3)Insert(x):将元素x插入优先队列。
(4)DeleteMin(x):删除优先队列中具有最小优先级值的元素,并保存到x中。
11/11/2017
3
福州大学数学与计算机科学学院
9 堆与优先队列
用实现有序字典的方式实现优先队列
(1)优先队列与字典的相似性与区别:
优先队列中元素的优先级值可以看作是有序字典中元素的线性序值。
在有序字典中,不同的元素具有不同的线性序值,其插入运算仅当要插入元素x的线性序值与当前字典中所有元素的线性序值都不同时才执行。
对于优先队列来说,不同的元素可以有相同的优先级值。因此,优先队列的插入运算即使在当前优先队列中存在与要插入元素x有相同的优先级值的元素时,也要执行元素x的插入。
11/11/2017
4
福州大学数学与计算机科学学院
9 堆与优先队列
用实现有序字典的方式实现优先队列
(2)由于优先队列与字典的相似性,除了散列表之外,所
有实现字典和有序字典的方法都可用于实现优先队列。
用有序链表实现优先队列;(Insert低效)
用二叉搜索树实现优先队列;(Insert,DeleteMin, Min 均低效)
用AVL树实现优先队列;(逻辑复杂)
用无序链表实现优先队列;(DeleteMin, Min均低效)
……
都有缺点。原因在于没有考虑到优先队列的特性。
11/11/2017
5
福州大学数学与计算机科学学院
9 堆与优先队列
用优先级树实现优先队列
:
DeleteMin和Min只关心优先级最高的元素
Insert的元素不要求全局的序关系
因此实现优先队列的结构只要求方便DeleteMin和Min,而对Insert也只要求不给结构的维护带来太大的麻烦。
根据这两个特征,人们发明了优先级树。
11/11/2017
6
福州大学数学与计算机科学学院
9 堆与优先队列
用优先级树实现优先队列(续)

优先级树是满足下面的优先级性质的二叉树:
(1)树中每一结点存储一个元素。
(2)任一结点中存储的元素的优先级值不大(小)于其儿子结点中存储的元素的优先级值即父结点的优先级不低于其儿子结点的优先级。
换句话说,越接近根的结点中的元素的优先级越高,越方便被访问,因为根最方便被访问。
相应的优先级树称为极小(大)化优先级树。
11/11/2017
7
福州大学数学与计算机科学学院
9 堆与优先队列

用优先级树实现优先队列仍有不足:
Insert(x)和DeleteMin(x)后对结构的维护,在最坏情况下,仍需O(h)=O(n)。
如果让优先级树近似满,从而h=[log n],达到最小,那么,结果将令人满意:在最坏情况下, Min( )将只需O(1), Insert(x)和DeleteMin(x)后对结构的维护只需O(log n)。
因而引入堆的概念并用堆来实现优先队列。
(1)堆的概念:
如果一棵优先级树是一棵近似满二叉树,那么,这棵具有优先级性质的近似满二叉树(外形像堆)就叫做堆。
(2)用堆实现优先队列:
Min( )、Insert(x)和DeleteMin(x)运算的实现