博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法笔记2-优先队列(堆)(上)
阅读量:5172 次
发布时间:2019-06-13

本文共 635 字,大约阅读时间需要 2 分钟。

 

一、什么是优先队列?

看一情景:我们去KTV唱歌,点歌的时候,能够发现所点的歌就是一个队列。

这时候,一个MM突然不玩手机了想唱歌,于是她来点歌,而且想尽早轮到她。

于是她能够选择“插歌”这个功能插到前排队列里。

这样的具备能够插入优先权元素的队列,就叫优先队列。可是,这个定义不是严谨的。

优先队列的基本模型是这种——

 

具备两个功能:

  • insert插入;
  • deleteMin 删除最小者。

它的工作就是——

它非常实用哦,详细能够用在操作系统,外部排序和贪婪算法中等。

 

 

二、怎么实现优先队列?

1、用链表

  • 方案A: 链表乱序,以O(1)的代价插入,以O(N)的代价遍历该链表来删除最小元素。
  • 方案B:让链表始终保持排序状态,然后删除得代价就是O(1),可是插入的代价就相对高了,是O(N);

比較——

一般而言,删除最小的操作从来非常少会有多余插入操作的时候,因此方案A要比B要好些。

 

2、用二叉查找树

二叉查找树对于两种操作的执行时间都是O(logN) 。只是可能有点过分了,由于二叉查找树能够做的功能远多于此,有点杀鸡用牛刀的嫌疑。因此,我们将使用比較合适的数据结构——二叉堆。

 

三、二叉堆

1、什么是二叉堆?

满足例如以下结构性和堆序性,即为二叉堆。

结构性质:堆是一棵被全然填满的二叉树,有可能的例外是在底层,底层上的元素从左到右填入。这种树称为全然二叉树。

转载于:https://www.cnblogs.com/mfrbuaa/p/3816203.html

你可能感兴趣的文章
IEnumerable<T>和IQueryable<T>区别
查看>>
(转)MFC界面风格
查看>>
Centos7 tmux1.6 安装
查看>>
二叉树(三)
查看>>
linux加密文件系统 fsck 无法修复一例
查看>>
【linux配置】VMware安装Redhat6.5
查看>>
AI自主决策——有限状态机
查看>>
《http权威指南》阅读笔记(二)
查看>>
软件工程
查看>>
http协议
查看>>
js替换问题replace和replaceAll
查看>>
c++11 : range-based for loop
查看>>
中国农历2013,2014 (zz.IS2120@BG57IV3)
查看>>
用virtualenv建立独立虚拟环境 批量导入模块信息
查看>>
Sublime Text3 插件:convertToUTF8
查看>>
BZOJ4060 : [Cerc2012]Word equations
查看>>
hdu2089不要62(数位dp)
查看>>
JAVA输出最大值和最小值
查看>>
64位weblogic11g安装
查看>>
oracle、mysql、sql server等;流行数据库的链接驱动配置
查看>>