配对堆Pairing Heap

[算法]优先队列之配对堆 配对堆的核心要义在于合并,只要掌握到合并的精髓就能很快的手撸一个配对堆。由于配对堆的插入复杂度只有常数级别,在通常情况下弹出最小值的性能也会由于二叉堆(Java、Python等语言中优先队列的默认实现),所以在做Prim时会有优势。 阅读详情

前言

最近做一道Dijkstra的题目,因为边数实在太大了( 109 10 9 ),用STL的priority_queue直接超时(事实上还会MLE)。有同学写配对堆的。刚好很久没学习新的数据结构了,就趁着这个机会补一补。

配对堆

配对堆 Pairing Heap 是一种实现简单、均摊复杂度优越的堆数据结构,由Michael Fredman、罗伯特·塞奇威克、Daniel Sleator、罗伯特·塔扬 于1986年发明。 配对堆是一种多叉树,并且可以被认为是一种简化的斐波那契堆。
(以上内容来自wikipedia)

怎么说呢?
首先,配对堆是一种可并堆,也支持与其他可并堆类似的操作,但是实现和原理较为简单(至少是相对与FIB堆)。

支持操作

配对堆主要支持以下操作:

  • find-min(查找最小值):返回堆顶。
  • merge(合并):比较两个堆顶,将堆顶较大的堆设为另一个的孩子。
  • insert(插入):创建一个只有一个元素的堆,并合并至原堆中。
  • decrease-key(减小元素)(可选):将以该节点为根的子树移除,减小其权值,并合并回去。
  • delete-min(删除最小值):删除根并将其子树合并至一起。这里有各种不同的方式。

接下来我们一个一个详细地讲解这些操作。

说明

  • 我们讲解时用小根堆作为例子(但示例图为大根堆,见谅)
  • 对于每个节点 i i ,我们用 S o n i 表示它的儿子节点的集合, Fai F a i 表示它的父亲节点。
  • 一个堆的根我们设为 root r o o t

1 FIND-MIN

简单地返回该堆堆顶即可。

2 MERGE

首先合并空堆将返回另一个堆,否则我们返回新堆的根。
假设我们要把 Heap1 H e a p 1 和 Heap2 H e a p 2 这两个堆合并起来。
那么我们需要比较一下 rootHeap1 r o o t H e a p 1 和 rootHeap2 r o o t H e a p 2 的权值,不妨设 rootHeap1

可并堆与二叉堆 •定义: –二叉堆满足堆特性:父结点的键值总是大于或等于(小于或等于)任何一个子结点的键值,且每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆) –完全二叉树,结点i的儿子是2*i和2*i+1,父亲是i/2; –当且仅当它满足以下两个条件之一时,才能称之为堆 •(1)a[i]i*2]且a[i]i*2+1](即小根堆,结点的值不大于两个儿子的值) •(2)a[i]>=a[i* 阅读详情

相关推荐

Pairing_heap(配对堆)

这个东西在pb_ds中用过。但不知道是什么。然后刚好这几天有空就看了一下。发现其实 很简单。他事实上就只是维护了一颗树而已。我们假设现在有NN个节点,每个节点都带有权值。我们要维护这些节点的一个堆。假设我们要维护一个小根堆。对于每个节点ii,我们都有一个表SonSon维护他所有的儿子,并且还有一个值FaiFa_{i}表示他的父亲。对于这颗树而言,我们保证每个节点的儿子的权值都要大于等于这个节点的权

PhilipsWeng的专栏 7228

【Dijkstra堆优化】【BZOJ 3040】 最短路(road)

传送门~Descriptionsubmit Time Limit: 60 Sec Memory Limit: 200 MBN个点,M条边的有向图,求点1到点N的最短路(保证存在)。 1<=N<=1000000,1<=M<=10000000Input第一行两个整数N、M,表示点数和边数。 第二行六个整数T、rxa、rxc、rya、ryc、rp。前T条边采用如下方式生成: 1.初始化x=y=z

jmsyzsfq的博客 842

jemalloc深入分析

1. bitmap查找算法的优化-32路查找 2. paring heap,配对堆的使用,提高排序效率 3. RB tree 红黑树 4. Tcache机制 5. 支持原子操作的线性同余伪随机数生成器 6. 动态头长度的计算过程map_bias 7. Region size设计以及和index对应关系 8. radix tree基数树 9. 高可靠性编程讨论 10. small/large/huge内存的分配和释放过程

5分钟搞懂深度学习如何革新声源定位:从GCC-PHAT到DNN的实战对比

本文深入对比了深度学习与传统GCC-PHAT方法在声源定位领域的实战表现。通过具体实验数据,展示了DNN模型在强混响、低信噪比等复杂场景下,如何实现定位准确率的显著提升,并探讨了其数据驱动范式带来的鲁棒性优势与工程部署挑战。

3a9bq4r8t2y的博客 223

【没有网络,安装python包】如何从 PyPI 下载并安装 Plotly 的离线包

在某些情况下,您可能需要在没有互联网连接的环境中安装 Python 包,例如在飞机上、在某些受限制的网络环境中或在需要离线安装的场景下。以下是如何在 PyPI(Python Package Index)下载 Plotly 包并进行离线安装的详细步骤。

赖德发的博客 1102

STM32L151C8T6低功耗实战:RTC闹钟唤醒停机模式的配置与优化

本文详细介绍了如何在STM32L151C8T6微控制器上配置与优化RTC闹钟唤醒停机模式,以实现极致的低功耗设计。文章从核心原理出发,结合STM32CubeMX配置实战,深入讲解了进入停机模式前的关键准备工作、唤醒后的系统恢复流程,并分享了将功耗降至个位数微安级的深度优化技巧与常见问题解决方案。

weixin_29166013的博客 298

Feko仿真GPS微带天线学习笔记

为了优化方便,使参数变量化,所以定义几个变量在CADFEKO左侧浏览器中如图所示定义变量,如下表贴片的尺寸切角尺寸feed =-6.4馈电点距坐标原点的距离sub_w=45基板的宽度sub_d=45基板的长度sub_h=5基板的高度epsR=5.6介电常数损耗角正切。

qq_36521926的博客 3988

关于solidworks无法获得下列许可SOLIDWORKS Standard的解决方法

在使用solid works的时候,出现无法获得下列许可SOLIDWORKS Standard,刚开始还以为软件出了问题,经过一方折腾找到了解决方法。希望这个方法可以帮助到您 找到这个服务 问题到这里就已经得到了解决,但更大的问题是,要是每次遇见这种都要这么麻烦,岂不是很累?这里也提供一种方法。考虑到每个人的情况,下面说的可能有一点啰嗦。 !!!!!!注意那个在此期间之后重新启动服...

Chaosna13的博客 7万+

基于任务的功能磁共振成像的连接性分析

虽然这种方法通过减少偶然只选择特异性代表的可能性来改善可推广性,但类别内和类别间的变异性变得更难控制(例如,"鸟类"可能是一个比"车辆"更加/不那么同质的类别),并且可能会出现关于这些预定义类别是否是现实世界实体的有意义划分的担忧——尽管这个限制在某种程度上可以通过表征相似性分析来解决。特别是,海马单变量激活和语义认知区域(左下额回)中语义信息的表征强度之间的交互预测了项目的概念记忆,而海马单变量激活和视觉处理区域(腹内侧枕叶皮层)中视觉属性的表征强度之间的交互预测了图像样本的知觉记忆。

cc1609130201的博客 2229

人工智能 (Artificial Intelligence, AI) 原理与代码实例讲解

人工智能 (AI) 机器学习 (Machine Learning) 深度学习 (Deep Learning) 算法 模型 代码实例 应用场景 1. 背景介绍 人工智能 (Artificial Intelligence, AI) 作为一项前沿科技,近年来发展迅速,已渗透到生活的方方面面

AI架构师小马 1225

让 ME51N 在采购信息记录过期时不要带出上一次采购订单的价格

在采购信息记录(PIR)价格条件无效或过期时,到上一次采购订单价格进行提议;你可以通过关闭,并在把PO price设置为不采纳,再辅以把过期的价格来源直接拦截为错误。若仍需 100% 阻断,可用在保存前清空估价价格作为技术兜底。标准行为与配置证据见文内引用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 655

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: TC SRM674 DIV2 T3 VampireTreeDiv2
下一篇: ZOJ 3649 Social Net
「已注销」
博客等级 码龄9年 13粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值