优先队列

介绍

1、利用堆实现,逻辑结构:堆,储存结构:数组

2、入队、出队时间复杂度O(logn)

3、对于一个含有 N 个元素的基于堆的优先队列

(1)插入元素操作只需不超过(lgN + 1)次比较

(2)删除最大元素的操作需要不超过 2 * lgN 次比较

4、用堆实现的优先队列在现代应用程序中越来越重要,因为它能在插入操作和删除最大元素操作混合的动态场景中保证对数级别的运行时间

 

最大优先队列

1.可以获取并删除队列中最大的值,无论入队的顺序,当前最大的元素先出列

2.出队操作

(1)先构造成大顶堆,此时根节点为最大

(2)队列首尾元素交换,此时尾元素为最大,将尾元素出队

(3)调整队列结构,恢复成大顶堆,从根节点向下调整堆,大节点上浮,小节点下沉

 

最小优先队列

1.可以获取并删除队列中最小的值,无论入队的顺序,当前最小的元素先出列

2.出队操作

(1)先构造成小顶堆,此时根节点为最小

(2)队列首尾元素交换,此时尾元素为最小,将尾元素出队

(3)调整队列结构,恢复成小顶堆,从根节点向下调整堆,小节点上浮,大节点下沉

 

索引优先队列

1.解决优先队列缺陷,可以根据索引获取队列中的元素信息

2.原理

(1)插入元素时将元素与一个索引相关联,之后便可以使用索引获取元素

(2)不能破坏原数据的键值对关系,所以把排好队列的原数据中的键抽取出,抽出来的键又组成了一个队列pq(pq数组需要堆有序)重新生成了一个索引

(3)为了快速查找到键,又把pq数组中的索引抽出来,组成了qp

(4)三个数组结合起来的效果就是,原数组中的值修改了,数据结构中需要对键进行上浮或者下沉

(5)原数据的值的改动,实质进行堆调整的是pq

(6)为了更有效的找到pq数组中的值,逆序出来的qp数组,即pq数组中的值是qp数组的索引,pq的索引是qp的值

3、在一个大小为 N 的索引优先队列中,插入元素、改变优先级、删除、删除最小元素操作所需的比较次数和 logN 成正比

posted @   半条咸鱼  阅读(77)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示