zoukankan      html  css  js  c++  java
  • Algs4-2.4.29-同时面向最大和最小元素的优先队列

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

     
    解:声明一个元素数组a,用来存放元素。每个元素有元素值、在大堆数组中的下标、在小堆中数组中的下标。
     
    构建一个大堆,大堆数组元素的值是数组a的下标,数组a中最大元素值的下标保存在堆顶元素中。
     
    构建一个小堆,小堆数组元素的值是数组a的下标,数组a中最小元素值的下标保存在堆顶元素中。
     
    在构建完大堆后更新数组a中每个元素的 在大堆数组中的下标。这可以通过遍历大堆的每个元素,元素的值就是数组a的下标,然后将数组a这个元素的 在大堆数组中的下标设置为大堆数组的下标值。
     
    在构建完小堆后更新数组a中每个元素的 在小堆数组中的下标。这可以通过遍历小堆的每个元素,元素的值就是数组a的下标,然后将数组a这个元素的 在小堆数组中的下标设置为小堆数组的下标值。
     
    1)插入元素
      先在数组a中的最后增加一个元素,然后将这个元素插入大堆、小堆,在插入过程中交换过位置的元素都需要更新数
     
    组a中 在大堆数组中的下标、在小堆数组中的下标。
     
    2)删除最大元素、删除最小元素
      与插入元素时相同都需要调整元素的 在大堆数组中的下标 和 在小堆数组中的下标。
     
    另:如果用数组a来保存元素,删除后容易留下空位,造成存储浪费。
    也可以不用数组a保存元素,直接让大小堆元素指向这些元素。
  • 相关阅读:
    菜鸟之旅——序章0
    Nginx设置反向代理内网服务器/内部端口
    Laradock ppa加速
    Qt setGraphicsEffect出现崩溃 读取位置 时发生访问冲突
    3.5tensorflow线性回归和线性拟合
    Dockerfile Security Best Practice
    Docker: Exec user process caused "no such file or directory"
    Installing Kubernetes with kops
    Dockerfile 最佳实践
    Configuring HSTS in NGINX
  • 原文地址:https://www.cnblogs.com/longjin2018/p/11737573.html
Copyright © 2011-2022 走看看