• 算法笔记2-优先队列(堆)(上)


     

    一、什么是优先队列?

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

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

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

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

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

     


    具备两个功能:

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

    它的工作就是——


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

     

     

    二、怎么实现优先队列?

    1、用链表

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

    比較——

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

     

    2、用二叉查找树

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

     

    三、二叉堆

    1、什么是二叉堆?


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

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

  • 相关阅读:
    Oracle.ManagedDataAccess.dll 连接Oracle数据库不需要安装客户端
    Oracle.DataAccess.Client.OracleCommand”的类型初始值设定项引发异常
    SQLAchemy
    MySQL 索引详解大全
    不用任何图片,只用简单的css写出唯美的钟表,就问你行吗?
    Ajax详解
    Mysql自定义函数
    MySQL目录
    Mysql函数集合
    MySQL之扩展(触发器,存储过程等)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3816203.html
Copyright © 2020-2023  润新知