您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习笔记——优先级队列

2018-03-22 10:30 1741 查看
一:优先级队列
优先级队列(Priority Queue):0个或者多个元素的集合,每个元素都有一个优先级,优先级可以相同
                                                  有三个基本操作:查找队首元素,删除队首节点,在队尾插入节点
最大优先级队列(Max Priority Queue):查找和删除都是优先级最大的元素
最小优先级队列(Min Priority Queue):查找和删除都是优先级最小的元素
大根树:每个节点的值都大于等于子节点的值
小根树:每个节点的值都小于等于子节点的值
堆(Heap):完全二叉树
大根堆:既是大根树也是完全二叉树
小根堆:既是小根树也是完全二叉树
大根堆的插入:若是新节点元素大于父节点元素,则执行起泡操作,将新元素与父节点的元素交换,一趟一趟起泡
大根堆的删除:就是删除根节点的元素,要保证过程中保证大根堆的结构
二:左高树
外部节点(external node):代替树中的空子树,其余节点叫内部节点
扩充二叉树(extended binary tree):增加了外部节点的二叉树
s(x):从节点x到其子树的外部节点的所有路径中最短的一条,若x是外部节点,则s=0
高度优先左高树(height-biased leftist tree, HBLT):任何一个节点的左孩子的s值都大于等于右孩子的s值
最大HBLT(max HBLT):一棵HBLT同时还是大根树
最小HBLT(min HBLT):一棵HBLT同时还是小根树
w(x):以节点x为根的树的内部节点数目,包括节点x自己在内
重量优先左高树(weight-biased leftist tree, WBLT):任何一个内部节点的左孩子的w值都大于等于右孩子的w值
最大HBLT的插入:利用合并操作来实现,把新插入的元素当成一棵新的只包含这个元素的HBLT
最大HBLT的删除:通过删除根节点之后的两棵子树的合并来实现
最大HBLT的合并:递归。令A,B是需要合并的两棵最大HBLT,先比较两个根元素,较大者最为合并后的根。假定A的根较大,且左子树为L,令C是A的右子树与B合并后的HBLT。A与B合并后的结果是以A为根,以L和C为子树的最大HBLT。如果L的s值小于C的s值,则C为左子树,否则L为左子树。
最大HBLT的初始化:将N个元素逐个插入最初为空的最大HBLT。首先创建N个仅含一个元素的最大HBLT,这N棵树组成一个FIFO队列,然后从队列中依次成对删除HBLT,然后将其合并后再插入队列末尾,直到队列只有一棵HBLT为止。
三:堆排序
先用N个待排序的元素来初始化一个大根堆,然后从堆中逐个提取元素,因为大根堆中每次提取出的都是最大的元素,所以提取出的元素按非递增顺序排列。
初始化时间为O(n),每次删除的时间为O(logn)
因此总时间为O(nlogn)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: