• Algs4-2.4.29-同时面向最大和最小元素的优先队列


    2.4.29同时面向最大和最小元素的优先队列。设计一个数据类型,支持如下操作:插入元素、删除最大元素、删除最小元素(所需时间均为对数级别),以及找到最大元素、找到最小元素(所需时间均为常数级别)。提示:用两个堆。

     
    解:声明一个元素数组a,用来存放元素。每个元素有元素值、在大堆数组中的下标、在小堆中数组中的下标。
     
    构建一个大堆,大堆数组元素的值是数组a的下标,数组a中最大元素值的下标保存在堆顶元素中。
     
    构建一个小堆,小堆数组元素的值是数组a的下标,数组a中最小元素值的下标保存在堆顶元素中。
     
    在构建完大堆后更新数组a中每个元素的 在大堆数组中的下标。这可以通过遍历大堆的每个元素,元素的值就是数组a的下标,然后将数组a这个元素的 在大堆数组中的下标设置为大堆数组的下标值。
     
    在构建完小堆后更新数组a中每个元素的 在小堆数组中的下标。这可以通过遍历小堆的每个元素,元素的值就是数组a的下标,然后将数组a这个元素的 在小堆数组中的下标设置为小堆数组的下标值。
     
    1)插入元素
      先在数组a中的最后增加一个元素,然后将这个元素插入大堆、小堆,在插入过程中交换过位置的元素都需要更新数
     
    组a中 在大堆数组中的下标、在小堆数组中的下标。
     
    2)删除最大元素、删除最小元素
      与插入元素时相同都需要调整元素的 在大堆数组中的下标 和 在小堆数组中的下标。
     
    另:如果用数组a来保存元素,删除后容易留下空位,造成存储浪费。
    也可以不用数组a保存元素,直接让大小堆元素指向这些元素。
  • 相关阅读:
    css样式初始化代码总结
    linux LVM逻辑卷的创建,扩容,缩减和删除
    MAC Jenkins安装 + Xcode + 蒲公英 + Testflight
    Linux rsyslog工具
    linux 中 Vi 和 Vim 的使用
    Zabbix实战--监控Nginx、MySQL与VM esxi主机、vSphere Client、JAVA应用
    Linux下netstat命令详解
    Debian 10上使用UFW设置防火墙
    开源网络安全检测工具——伏羲 Fuxi-Scanner
    CentOS8的web终端-cockpit,通过Cockpit管理KVM虚拟机
  • 原文地址:https://www.cnblogs.com/longjin2018/p/11737573.html
Copyright © 2020-2023  润新知