【数据结构笔记】优先级队列PriorityQueue

堆序性质:除了根节点,其他节点都不大(小)于父节点

  • 进而根节点是最大(小)堆的最大(小)元

完全二叉堆

物理上是Vector

逻辑上是完全二叉树

  • 层次遍历序列与物理存储顺序相同
  • Rank为k的左孩子Rank为1+2k
  • Rank为k的右孩子Rank为2+2k
  • Rank为k的父节点Rank为⌊(k-1)/2⌋

上滤插入

  • 在Vector末尾插入元素e
  • 计算e的父节点的Rank,找到父节点,检查二者大小
    • 如果父节点更优,完成
    • 如果父节点更优,就交换二者数据项
      • e的数据项在逻辑上的完全二叉树中上升一层
    • 仅需比较1次
  • 如此循环上滤,直到完成或升为根节点

  • 最坏情况时间复杂度O(logn)
  • 平均情况时间复杂度O(1)
    • 最后两层占总节点数不少于一半,平均最多上升一层

下滤删除

  • 把Vector末尾元素r与堆顶元素互换
  • 计算r的所有孩子节点的Rank,找到所有孩子节点,检查大小
    • 如果无孩子节点更优,完成
    • 如果有孩子节点更优,r与更大的孩子节点交换
      • r的数据项在逻辑上的完全二叉树中下降一层
    • 需比较2次
  • 如此循环下滤,直到完成或降为叶节点

期望运行时间为O(logN)

  • 最后两层占总节点数不少于一半

Floyd建堆

对于规模为n的输入,组织为Vector

  • n/2以前的节点有孩子节点
  • 按Rank从高到低依次下滤
    • 每次下滤结束,以当前节点为根的完全二叉堆维持堆序性
    • 单次下滤复杂度为所在子堆的高度=本身高度

时间复杂度为O(n)

  • 所有节点高度之和为O(n)

与n次调用BinHeap::insert()建堆比较

  • Floyd建堆渐进复杂度优
  • n较小时Floyd建堆无优势
  • Floyd建堆为离线算法, n次调用BinHeap::insert()建堆为在线算法

【2016-THU-Fin】完全二叉堆删除元素在最坏情况下时间复杂度为O(logn),但平均情况下仅为O(1)。(×)

【2013,2016-THU-Fin】在使用Heapify批量建堆的过程中,改变同层节点的下滤次序对算法的正确性和时间效率都无影响。(√)

【2016-THU-Fin】二叉堆中某个节点秩为𝑘, 则其兄弟节点(假设存在)的秩为(AB)

A. 𝑘 + 1
B. 𝑘 − 1
C. 𝑘 + (−1)^𝑘
D. 𝑘 − (−1)^𝑘
E. 以上皆非 

【2017-THU-Fin】当输入是理想随机的时候堆的delMax的平均复杂度是O(1),尽管最坏是 O(logn)。(×)

min-max堆

(《数据结构与算法分析 Java语言描述》练习6.18)

d-堆

物理上是Vector

逻辑上是完全d叉树

  • 层次遍历序列与物理存储顺序相同
  • Rank为k的第i个孩子Rank为i+kd
  • Rank为k的父节点Rank为⌊(k-1)/d⌋

上滤插入

单次上滤时间复杂度不变,堆高减小

时间复杂度降为O(\log_dn)

下滤删除

单次下滤需要d次比较,堆高减小

  • d=3时总时间复杂度减小
  • d=4时总时间复杂度不变
  • d>4时总时间复杂度增大

【2013-THU-Fin】多叉堆比二叉堆插入慢,删除快。(×) 

【2014-THU-Fin】对于二叉堆,尽管多叉堆的高度更低,但无论是下滤一层还是整个下滤过程,时间成本反而都会增加。(×)

【2016-THU-Fin】与二叉堆相比,多叉堆 delMax()操作时间复杂度更高。 (×)

左式堆

添加外部节点成为真二叉树

对任意内部节点node,有npl(node.leftChild) >= npl(node.rightChild)

  • 零路径长Null Path Length(npl):节点到孩子外部节点的最短路径长度
    • npl(NULL) = 0
    • npl(node) = 1 + min{npl(node.leftChild), npl(node.rightChild)}
      • 对于左式堆,npl(node) = 1 + npl(node.rightChild)
    • npl(node) = node到孩子外部节点的最短路径长度 = 以node为根的最大满二叉树高度
  • 左式堆的任意子树(堆)也是左式堆
  • 左式堆的右侧链rChain是根节点通向外部节点的最短路径
    • 右侧链:一直node = node.rightChild直到node = NULL
    • npl(root) = rChain(r).length
    • 如果npl(root) = d
      • 这表明其他通向外部节点的路径都不小于d
      • 左式堆截取深度d及以上部分为满二叉树

合并

递归地

  • 把更优根的右子堆与另一根堆合并
  • 过程中保持每次递归merge结束后,merge得到的根节点处都满足左式堆性质
    • 左右子堆交换
    • 因此最终合并得到的rChain可能来自于
  • 更新全堆npl

时间复杂度为两堆rChain长度之和,为O(logmn)

(《数据结构与算法分析 Java语言描述》练习6.21)

插入

堆与单个节点合并

时间复杂度为O(logn)

删除

摘除根节点后得到的两个左式堆合并

时间复杂度为O(logn)

【2014-THU-Fin】对于任何一棵二叉树T,其右、左子树的规模之比称为右偏率。对于(常规)高度同为h的AVL树(A),红黑树(R),左式堆(L),若分别考查其右偏率所能达到的最大值,则在h足够大之后,三者按此指标的排列次序应是()
A. L<R<A
B. L<A<R
C. R<A<L
D. A<R<L
E. 以上皆非 

【2016-THU-Fin】有2015个节点的左式堆,左子堆最小规模为(E)(不计外部节点)
A. 10
B. 11
C. 1007
D. 1008
E. 以上皆非

【2016,2017-THU-Fin】对于左式堆A和B,合并后所得二叉堆的右侧链元素一定来自A和B的右侧链。(×) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/899046.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阅读笔记 Marketing Management Chapter 12

来源: Marketing Management, Kotler and Keller (2016), 15th edition Chapter 12 Addressing Competition and Driving Growth 本章围绕以下问题展开&#xff1a; 为什么公司发展核心业务很重要&#xff1f; 市场领导者如何扩大整个市场并捍卫市场份额&#xff1f; 市场挑…

Go_Parser部署、使用与原理分析

文章目录 前言1、概述2、安装与使用2.1、源码安装2.1.1、部署系统依赖组件2.1.1.1、部署IDA Pro 7.5 SP32.1.1.2、部署Python 3.9.132.1.1.3、部署Go 1.13.1 2.1.2、使用源码安装系统 2.2、使用方法2.2.1、准备测试程序2.2.2、创建IDA Pro项目2.2.3、使用Go_Parser解析二进制程…

【毕业设计】基于SpringBoot的网上商城系统

前言 &#x1f525;本系统可以选作为毕业设计&#xff0c;运用了现在主流的SSM框架&#xff0c;采用Maven来帮助我们管理依赖&#xff0c;所选结构非常合适大学生所学的技术&#xff0c;非常合适作为大学的毕业设计&#xff0c;难以适中。 &#x1f525;采用技术&#xff1a;Sp…

『Mysql集群』Mysql高可用集群之读写分离(二)

前言 主从复制: 解决了Mysql的单点故障问题以及提高MySQL的整体服务性能. 读写分离: 解决的是数据库的读性能问题,分担主库的压力&#xff0c;提高系统的可用性和稳定性。 分库分表: 数据库分表可以解决单表海量数据的查询性能问题&#xff0c;分库可以解决单台数据库的并发…

libaom 编解码项目编码接口文件介绍

对外头文件&#xff1a; 编码端&#xff1a;aom/aom_encoder.h、aom/aomcx.h解码端&#xff1a;aom/aom_decoder.h、aom/aomdx.h aom/aom_encoder.h 该头文件包了aom/aom_codec.h、aom/aom_external_partition.h头文件介绍&#xff1a;当前文件描述了应用程序与视频编码器算法之…

基于tfjs实现线性回归等基本模型

目录 1.回归模型基础概念与应用综述 1.1 线性回归&#xff08;Linear Regression&#xff09; 1.2 多元线性回归&#xff08;Multiple Linear Regression&#xff09; 1.3 广义线性回归&#xff08;Generalized Linear Model, GLM&#xff09; 1.4 逻辑回归&#xff08;Lo…

关于武汉芯景科技有限公司的限流开关芯片XJ6241开发指南(兼容LTC4411)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.CTL引脚控制VIN和VOUT的通断 2.CTL引脚控制STAT引脚的状态 3.输出电压高于输入电压加上–VRTO的值&#xff0c;芯片处于关断状态

免费开源Odoo软件如何实现电商仓库高效发货

世界排名第一的免费开源ERP软件Odoo&#xff0c;拥有非常强大的仓库管理WMS功能。本文以电商仓库发货管理为例&#xff0c;介绍电商订单的仓库发货作业的各种方法。电商订单仓库发货流程&#xff0c;通常分为三个步骤&#xff0c;即拣货、打包、发货。根据仓库日处理订单数量的…

HTTP Proxy环境下部署Microsoft Entra Connect和Health Agents

在企业环境中&#xff0c;时常需要通过使用HTTP Proxy访问Internet&#xff0c;在使用HTTP Proxy访问Internet的环境中部署Microsoft Entra Connect和Microsoft Entra Connect Health Agents可能会遇到一些额外的配置步骤&#xff0c;以便这些服务能够正常连接到Internet。 一…

linux系统之jar启动脚本

编辑linux启动脚本 执行 vi run_blog 按i 进入编辑&#xff0c;复制以下代码&#xff0c;并根据当前环境修改三个参数。以下是详细完整脚本代码&#xff1a; #!/bin/bash# 配置部分 JAR_PATH"/path/to/your/app.jar" # 替换为你的 JAR 文件的实际路径 L…

CRMEB标准版Mysql修改sql_mode

数据库配置 1.宝塔控制面板-软件商店-MySql-设置 2.点击配置修改&#xff0c;查找sql-mode或sql_mode &#xff08;可使用CtrlF快捷查找&#xff09; 3.复制 NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 然后替换粘贴&#xff0c;保存 注&#xff1a;MySQL8.0版本的 第三步用…

从新手到高手:map和set的使用技巧全攻略(C++)

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 本章节讲解的map和set底层…

自定义多级联动选择器指南(uni-app)

多端支持&#xff1a;可以运行在H5、APP、微信小程序还是支付宝小程序&#xff0c;都可以轻松使用改组件。自定义配置&#xff1a;您可以根据需要配置选择器的级数&#xff0c;使其适应不同的数据结构和用例。无限级联&#xff1a;此组件支持无限级联选择&#xff0c;使您能够创…

MySQL--基本介绍

一.数据库前言 1.数据库的相关介绍 关系数据库管理系统&#xff08;Relational Database Management System&#xff1a;RDBMS&#xff09;是指包括相互联系的逻辑组织和存取这些数据的一套程序 (数据库管理系统软件)。关系数据库管理系统就是管理关系数据库&#xff0c;并将数…

张雪峰:如果你现在是计算机专业,一定要优先报网络安全,它是未来国家发展的大方向

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 前言 “计算机专业 一定要优先报 网络安全 它是未来国家发展的大方向” 为什么推荐学网络安全&#xff1f; “没有网络安全就没有国家安全。”当前&#xff…

Git Push(TODO)

最近经常碰到GIT push不上去的问题。到处求人解决也真是尴尬&#xff0c;想自己看看&#xff0c;所以刚刚在github上建了一个仓&#xff0c;试了下。结果如下&#xff1a; 暂时可能还不行&#xff0c;因为数据都是加密的&#xff0c;没法看到具体GIT的交互信息。。。 后面再想办…

12.个人博客系统(Java项目基于spring和vue)

目录 1.系统的受众说明 2.相关技术介绍 2.1 B/S 简介 2.2 JAVA 简介 2.3 vue简介 2.4 SSM和Springboot简介 3.可行性分析 3.1 技术可行性分析 3.2 经济可行性分析 3.3 操作可行性 4.系统设计 4.1 系统总流程 4.2 博主用例 4.3 游客用例 4.4 系统类 4.…

HarmonyOS 模块化设计

1.HarmonyOS 模块化设计 模块化设计文档   应用程序包开发与使用文档 1.1. 概述 组件化一直是移动端比较流行的开发方式&#xff0c;有着编译运行快&#xff0c;业务逻辑分明&#xff0c;任务划分清晰等优点&#xff0c;HarmonyOs组件化的使用&#xff0c;有利于模块之间的解…

算法笔记day05

目录 1.最小公倍数 2.最长连续的子序列 3.字母收集 1.最小公倍数 求最小公倍数_牛客题霸_牛客网 算法思路&#xff1a; 这就是一道数学题&#xff0c;a,b的最小公倍数 a * b / 最大公约数。 使用辗转相除法&#xff0c;求a&#xff0c;b的最大公约数。 #include <iostre…

Cadence元件A属性和B属性相互覆盖

最近在使用第三方插件集成到Cadence,协助导出BOM到平台上&#xff0c;方便对BOM进行管理和修改&#xff0c;结果因为属性A和属性B不相同&#xff0c;导致导出的BOM错误。如下图&#xff1a; ​​ 本来我们需要导出Q12&#xff0c;结果给我们导出了Q13&#xff0c;或者反之&…