数据结构(邓俊辉)学习笔记】优先级队列 10——左式堆:插入 + 删除

news2024/9/22 1:02:33

文章目录

  • 1. 插入即是合并
  • 2. 删除亦是合并

1. 插入即是合并

以上,我们已经实现了,对于左式堆来说最为在意的合并算法。非常有意思的是,尽管合并操作并非优先级队列所要求的基本操作接口。但基于合并操作,我们却同样可以实现左式堆高效的插入与删除操作。

也就说,从本质上,左式堆只需要"合并"这一个操作即足以。正所谓"一招鲜,吃遍天"。

首先来看,如何基于合并操作实现左式堆的节点插入算法:
在这里插入图片描述
这就是一个典型的场景。我们需要将一个新的节点 e 插入到已有的一个左式堆中。这样一个场景与左式堆的合并算法有什么联系呢?没错,只要将这个新的节点视作仅含一个元素的左式堆,那么这次插入操作不就是一个不折不扣的合并操作吗?

如果你能参透这一点,也就自然可以写出这样一个算法。

  1. 可以将待插入的元素封装为一个二叉树节点。当然它也自然就是一个左式堆的节点,或者更进一步地,它也就是以它自己为唯一成员的那个左式堆的根节点。
  2. 因此按照刚才所参悟到的原理,接下来我们只需调用左式堆标准的合并接口,将这个新生成的节点与此前的左式堆合并起来。

除此之外,我们并没有更多的实质操作,仅此而已。

2. 删除亦是合并

实际上,基于左式堆的合并操作,还可以顺利地实现它的删除接口。

一个典型的删除操作的情景无非如此:在左式堆中,最大元依然在根节点处唾手可得,因此每次删除操作,我们都首先需要将这个根节点在物理上删除掉。而接下来任务也无非是将被分离出来的左子堆与右子堆合并起来,继续构成一个总体的左式堆。实质的操作,又是一次合并。

同样地,如果能参悟到这一点,也应该很自然地可以写出以下的算法。
在这里插入图片描述

  1. 前三句都是铺垫,对相关的数据做备份而已。
  2. 根节点的物理摘除由这一句来完成(第四句)。
  3. 而此后,正如我们刚才所参悟到的原理,只需将此时被隔离开的左子堆与右子堆重新的合并起来。

同样的,此后也没有更多的实质操作,仅此而已。

可以看到,按照这一方式,无论是左式堆的删除,还是刚才的插入操作,实质的计算无非都集中在合并接口上。

我们此前介绍过,合并可以高效率地在 log(n) 的时间内完成。既然这样,如此实现的删除以及刚才的插入操作也能够达到这样的效率。 同样的计算效率加上更为简明的实现方法,我还有什么理由不采用这种方式呢?

实际上,关于分合之道,左式堆的发明者 Crane 堪称个中高手。除了左式堆,他还针对其他的很多数据结构给出了高效的合并算法。比如对于我们已经熟悉的 AVL 树, Crane 也给出了一个高效的合并算法。

如果你对于这一问题感兴趣,不妨看看我们习题解析中相应的习题。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超全大模型训练流程,教你如何训练自己的大模型

“大模型的核心主要有两部分,一是训练数据,二是机器学习模型。” 现在大模型发展得如火如荼,但是没有学过人工智能技术的开发者,只会调用其接口,但不清楚怎么训练一个大模型。 今天就简单介绍一下自己的理解&#xf…

Transformer系列-10丨一文理解透Transformer

一、引言 "Attention Is All You Need"是一篇于2017年发表的开创性论文,首次介绍了Transformer模型。 这篇论文彻底改变了自然语言处理(NLP)领域的研究方向,为后续的众多NLP模型和应用奠定了基础。我们熟知的ChatGPT也…

【022】字符串的处理(输出,分割,删除,新增,替换,查找,长度)_#VBA

字符串的处理——输出,分割,删除,新增,替换,查找,长度 字符串的处理1. 输出2. 长度3. 查找4. 删除5. 新增6. 分割7. 替换字符串的处理 为了更好快捷查找对应的字符串处理方法,将对应的方法汇总,可以直接使用,没有过多的介绍,直接代码块及对应效果。包括字符串的输出…

全国上市公司网络安全风险指数(2001-2023年)

数据来源:本数据参考耿勇老师等(2024)做法采集了2001-2023年的上市公司年报,所有年报均来自于深交所和上交所官方网站,通过对上市公司的年报进行精读,提取出包括网络安全、网络攻击等在内的39个关键词构成企…

自定义@ResponseBody以及SpringMVC总结

文章目录 1.需求分析2.目录3.自定义ResponseBody注解4.MonsterController.java5.Monster.java 实现序列化接口6.引入jackson7.Adapter.java 如果有ResponseBody注解就返回json8.测试9.SpringMVC执行流程 1.需求分析 2.目录 3.自定义ResponseBody注解 package com.sunxiansheng…

大数据技术之 Flume概述、安装(1)

目录 Flume 概述 Flume 定义 为什么选用 Flume Flume 基础架构 Agent Source Sink Channel Event Flume 安装 Flume 安装部署 安装地址 安装部署 Flume 概述 Flume 定义 Flume 是 Cloudera 提供的一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。Flume…

多系统萎缩不慌张,这些维生素是你的“守护神”✨

亲爱的朋友们,今天我们来聊聊一个可能不太为人熟知但至关重要的健康话题——多系统萎缩(MSA)。面对这样的挑战,除了医疗治疗,日常的营养补充也是不可或缺的一环。特别是维生素,它们在我们的身体中扮演着举足…

有无符号整形加减,截断,提升等问题解析

一:整形截断问题 1. 分析:-128 的原码是 10000000 00000000 00000000 10000000 补码是 11111111 11111111 11111111 10000000,因为是char 型,截断之后:10000000 %u 是打印无符号整数,整形提升补截断之后…

多态(详细介绍以及内存图展示)

什么是多态? 同类型的对象,表现出的不同形态 多态的表现形式 父类类型 对象名称 子类对象 多态的前提 1.有继承关系 2.有父类引用指向子类 Fu f new Zi() 3.有方法重写 多态的好处 使用父类型作为参数,可以接收所有子类对象 体现…

大模型从入门到精通,看这篇就够了,AI小白的大模型学习路径_大模型教程

写这篇文章的初衷:作为一个AI小白,把我自己学习大模型的学习路径还原出来,包括理解的逻辑、看到的比较好的学习材料,通过一篇文章给串起来,对大模型建立起一个相对体系化的认知,才能够在扑面而来的大模型时…

牛客小白月赛99

文章目录 A.材料打印B. %%%C.迷宫又是一年毕业季题目链接 A.材料打印 签到题&#xff0c;直接按照题意输出就行。赛时写的有点慢了&#xff0c;这种题应该一分钟之内写完的 void solve () {int n;cin>>n;for (int i1;i<n;i) {int a,b,c,d;cin>>a>>b>…

go const(常量)

常量介绍 示例 package mainimport ("fmt" )func main() {const name "tom"fmt.Println(name)const tax float64 0.8fmt.Println(tax) }go run const.go tom 0.8package mainimport ("fmt" )func main() {const a intfmt.Println(a) }go run…

SpringAop介绍与使用

AOP的介绍 在不修改原有代码的情况下 增强跟主要业务没有关系的公共功能代码到 之 前写好的方法中的指定位置 这种编程的方式叫AOP AOP的底层用的代理&#xff0c;代理是一种设计模式 静态代理 玩家类 代理类 他们的接口 最后用接口接收代理的类实现静态代理 总结&#x…

英特尔终止开发开源 H.265/HEVC 编码器项目

作为英特尔可扩展视频技术&#xff08;SVT&#xff09;计划的一部分&#xff0c;一直以来他们持续在开发 SVT-HEVC&#xff0c;这是一款 BSD 许可的高性能 H.265/HEVC 视频编码器&#xff0c;针对至强可扩展处理器和至强 D 处理器进行了优化。但最近他们改变了方向&#xff0c;…

kali安装

引言 Kali Linux 是一个基于 Debian 的 Linux 发行版&#xff0c;专门为渗透测试和安全审计而设计。它包含了大量的安全工具&#xff0c;如 Wireshark、Nmap、Metasploit 等&#xff0c;这些工具可以帮助安全专家和研究人员进行网络安全评估、漏洞检测和渗透测试。Kali Linux …

InternLM 2.5 书生·浦语 开源大模型本地部署体验

老牛同学之前偶尔刷到过InternLM大模型相关的介绍文章&#xff0c;因为在老牛同学心中&#xff0c;Qwen2千问才是国内开源模型中最适合自己的大模型&#xff0c;原因是自己在本地部署和应用Qwen2都非常满意&#xff0c;所以没有在意InternLM大模型&#xff0c;也就没有动力去了…

程序员的AI大模型进阶之旅,零基础入门到精通,收藏这一篇就够了

作为程序员&#xff0c;如果你有兴趣迈向AI大模型的进阶之旅&#xff0c;以下是一些步骤和资源可以帮助你&#xff1a; 基础知识&#xff1a;了解机器学习和深度学习的基础概念是重要的第一步。学习线性代数、概率论和统计学等数学基础知识&#xff0c;以及机器学习算法和神经网…

风波中坚守:技术应对突发故障的危与机

文章目录 快速响应与问题定位策略确定故障类型使用排查工具明确响应流程实时沟通与更新事后总结 健全的应急预案和备份机制制定应急预案定期演练数据备份和快速恢复机制持续改进 事后总结与持续改进分析问题根源定义改进措施促进团队学习培养危机意识 技术债务管理与监测识别与…

Netty基础知识

官网地址: https://netty.io/ 快速入门&#xff1a;https://netty.io/wiki/user-guide-for-4.x.html Netty 是一个 NIO 客户端服务器框架&#xff0c;方便快速、简单地开发网络应用程序。 NIO&#xff08;Non-blocking I/O&#xff0c;在Java领域&#xff0c;也称为New I/O&…

《牛虻》读后感

《牛虻》这本书是同事送的&#xff0c;最近换工作、搬家很多杂事&#xff0c;也就没有多少看书的兴致&#xff0c;所以断断续续看了快两周才看完。这是爱尔兰女作家埃塞尔丽莲伏尼契的代表作&#xff0c;在我国声名远播&#xff0c;是一代人的精神食粮。怀着崇敬的心情翻开这本…