数据结构与算法 优先队列

一.优先队列模型

优先队列(Priority Queue)是1种特殊的队列,通常使用堆来实现.在优先队列中,元素会被赋予优先级,具有最高优先级的元素最先被删除(first in, largest out).优先队列的基本操作包括插入(Insert;在队尾插入1个元素)和删除(DeleteMaxPriority;删除优先级最高的元素)

二.实现

以下假设最小的元素具有最高优先级

1.单链表实现:

使用1个单链表实现优先队列又分为2种思路:
①始终在表头执行插入操作,这样Insert()的时间复杂度为O(1)DeleteMaxPriority()的时间复杂度为O(N)
②始终让链表保持有序(如从小到大),这样Insert()的时间复杂度为O(N)DeleteMaxPriority()的时间复杂度为O(1)
由于DeleteMaxPriority()的操作次数不会多于Insert()的操作次数,思路①可能更合适

2.二叉查找树实现:

使用二叉查找树实现优先队列,Insert()/DeleteMaxPriority()的时间复杂度均为O(log N).另外,通过使用平衡树可以改善log N前的系数

三.应用

①操作系统
②外部排序,堆排序
③贪婪算法
...

猜你喜欢

转载自blog.csdn.net/weixin_46131409/article/details/113998970
今日推荐