首页 > 其他分享 >高级数据结构-可并堆

高级数据结构-可并堆

时间:2024-07-14 14:53:20浏览次数:12  
标签:左偏 合并 高级 儿子 当前 数据结构 节点 dis

可并堆,就是可以合并的堆。堆满足一个性质,就是当前节点,都大于或者等于他的所有子树上的节点,自然在这里我所讲的是结点的权值。显而易见,既然可并堆是堆的一种,容易推出,可并堆也满足这个性质。

现在思考一个问题,当题目里需要合并两个堆的时候,该如何合并呢?如果只是普通的堆的话,我们可以运用启发式合并的思想,每一次把size小的堆的点暴力插入到size大的堆里面,这个方法十分不优秀,时间复杂度是O(nlog2n)。所以我们会用可并堆来实现这个问题。

可并堆是一种运用到左偏树思想的堆,何为左偏树?左偏树顾名思义就是偏向左面的树,如左图就是一棵左偏树,这棵树明显满足一个性质。我们定义dis[p]为从p节点出发可以向右走的最大步数,从右图中可以看到,当前点的左儿子的dis值都比右儿子的dis值大,只要满足这个性质就是左偏树。

学过左偏树之后,我们就可以学习可并堆了,可并堆的难点就是合并,那么应该如何合并呢?为了能保证时间复杂度,我们每一次合并都应该把新的节点放在当前的节点的右儿子上,这个是一个递归的过程,每一次把当前的两个节点进行比较,留下权值大的点,然后递归下去把另一个点和留下的点的右儿子进行比较,如此下去,进行合并。当然每一次回溯之前,我们都需要判断当前节点的左右两个儿子的dis值,如果右儿子的dis值大于左儿子的dis值,则交换左右儿子。

标签:左偏,合并,高级,儿子,当前,数据结构,节点,dis
From: https://www.cnblogs.com/mcr130102/p/18301571

相关文章

  • 释放LangChain潜能:精通性能优化的高级技巧
    释放LangChain潜能:精通性能优化的高级技巧引言LangChain作为一个多语言编程工具链,提供了强大的功能来简化开发流程和增强代码的执行效率。然而,随着项目规模的扩大和需求的增长,性能优化成为保持LangChain项目竞争力的关键。本文将深入探讨LangChain的性能优化技巧,包括代码......
  • 入门PHP就来我这(高级)15 ~ 图书删除功能
    有胆量你就来跟着路老师卷起来!--纯干货,技术知识分享路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。  今天给大家接着上篇文章实现图书删除功能,来实现删除图书信息记录行的功能。 1删除图书首先我们的开始页面在列表:当点击删除红色......
  • 数据结构与算法分析实验7 构造哈夫曼树和生成哈夫曼编码
    文章目录1.上机名称2.上机要求3.上机环境4.程序清单(写明运行结果及结果分析)4.1程序清单4.1.1head.h头文件内容如下:4.1.2head.cpp实现文件内容如下:4.1.3源文件main.cpp内容如下:4.2程序运行结果5.上机体会1.上机名称构造哈夫曼树和生成哈夫曼编码2.上机......
  • 可持久化数据结构
    P4735转化到区间求\(\text{xor}\x\)后的最大值,用Trie。那么需要知道区间是否有在Trie树某个子树内的节点,用可持久Trie,或者离线扫右端点并记录左端点时间戳即可。第二个做法可以不离线,同样使用可持久Trie,但是求区间时不使用减法,而是只使用插入前\(r\)个数的Trie,通过......
  • 数据结构第25节 深度优先搜索
    深度优先搜索(Depth-FirstSearch,简称DFS)是一种用于遍历或搜索树或图的算法。DFS从根节点开始,尽可能深的搜索树的分支,当节点v的所在边都己被探寻过,搜索将回溯到上一个节点w,然后探索w的其他未搜索过的子节点。DFS有两种常用的方式:递归方式和非递归方式(通常使用栈来实......
  • 软考高级第四版备考--第18天(识别风险)Identify Risk
    定义:识别风险是识别单个项目风险以及整体项目风险的来源,并记录风险特种的过程。作用:记录现有的单个项目风险,以及整体项目风险的来源;汇总相关信息,以便项目团队能够恰当的识别的风险输入:项目管理计划(需求管理计划、进度管理计划、成本管理计划、质量管理计划、资源管理计划、风......
  • 【数据结构与算法】详解二叉树下:实践篇————通过链式结构深入理解并实现二叉树
          ......
  • gRPC高级——Metadata机制
    什么是MetadatagRPC让我们可以像本地调用一样实现远程调用,对于每一次的RPC调用中都可能会有一些有用的数据,而这些数据就可以通过metadata来传递。metadata是以key-value的形式存储数据的,其中key是string类型,而value是[]string,即一个字符串数组类型。metadata使得client和s......
  • gRPC 高级——Interceptor 拦截器
    gRPC拦截器是一种用于在RPC方法调用的生命周期中拦截和处理请求和响应的机制。拦截器允许开发者在请求到达实际服务方法之前或在响应返回客户端之前执行自定义逻辑。它们类似于中间件,广泛应用于日志记录、身份验证、请求修改等场景。拦截器的种类客户端拦截器(ClientInter......
  • 数据结构题目:几种典型排序算法的实现
    1、实验目的实现几种典型的排序算法2、实验具体要求分别利用直接插入/折半插入/希尔/冒泡/快速/简单选择排序算法实现将待排序序列{26,6,18,8,36,66,56,76,99}由小到大排序,并输出结果。3、实验设计思路(编程语言、模块划分及函数功能描述等)模块划分及函数功能描述:主函数模......