可并堆——左偏树 Leftist Heap

左偏树是一种数据结构,具备类似二叉堆的特性,能在O(1)时间内获取最大值,O(logn)时间内删除最大值。其优势在于能快速合并两个堆,复杂度为O(logn)。左偏树有两个关键性质:堆性质与距离定义。文章介绍了左偏树的合并、删除和查询操作,并提供了C++代码示例。此外,还提及了一个使用左偏树解决的HDOJ 1512 Monkey King问题,通过并查集和左偏树维护集合最大值。
摘要由CSDN通过智能技术生成

今天学习了左偏树,这是一个好理解而且好写的数据结构,和二叉堆一样可以在O(1)时间内取出优先级最高的值,O(logn)时间内删除优先级最高的值,不同的是如果要合并两个堆那么二叉堆就只能跪了。而左偏树能在O(logn)的时间内实现两个堆的合并。

左偏树有两个重要的性质,

1、树中每个元素小于或大于其父亲节点的值(堆性质)

2、定义节点的距离为当前节点向下到叶子节点最少所需的边数,叶子节点的距离为0,空节点的距离是-1,令dist[i]表示i节点的距离,那么dist[i]=dist[right[i]]+1;dist[left[i]]>=dist[right[i]],所以左偏树的左右子树都是左偏树。

如下图就是一颗左偏树

左偏树最核心操作就是【合并】。删除最大,插入都可由合并得到

假如我

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值