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

理解数据结构:优先级队列与左高树
本文深入探讨了优先级队列的概念,包括最大和最小优先级队列,以及它们与堆的关系。同时介绍了左高树(HBLT)的特性,如高度优先和重量优先,并阐述了最大HBLT的插入、删除和合并操作。最后提到了堆排序的原理和时间复杂度。

一:优先级队列

优先级队列(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)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值