Leftist Heaps

notion image
🦄
Npl(X) = min { Npl(C) + 1 for all C as children of X }
The leftist heap property is that for every node X in the heap, the null path length of the left child is at least as large as that of the right child. 如果只有一个节点是其自身的话,那么这个节点的NPL就是0
  • 定理:
A leftist tree with r nodes on the right path must have at least 2^r – 1 nodes.
notion image
  1. 首先完成merge操作
    1. notion image
      notion image
代码实现:
notion image
notion image
notion image
左偏堆,或者说左偏堆(Leftist Heap),它相比于普通的堆,更好的一点在于它支持快速的堆合并操作。“左偏”,并不断将新的东西往右侧合并,来实现每次都是往相对小的那一侧塞进东西,进而保相对证了这个
由于左偏堆不再是一个完全二叉树,所以我们不能再像维护大根堆小跟堆那样用数组来维护它了。
一个左偏堆的结点维护了左右子堆的地址、自身的键值、和一个“距离(dist)
  1. 如果一个结点的左孩子或右孩子为空结点,则该结点的 dist 为 0,这种结点被称为外结点;
    1. 0
  1. 如果一个结点的左孩子和右孩子都不为空,则该结点的 dist 为 min(distleft child,distright child)+1;
    1. notion image
       

Skew Heaps

a simple version of the leftist heaps
🦄
Always swap the left and right children except that the largest of all the nodes on the right paths does not have its children swapped. No Npl.
notion image
左偏堆是结点的键值应当不大于(不小于)其孩子结点的键值的二叉树(即堆的性质),且满足「左偏」性质——结点的左孩子的 dist 不小于右孩子的 dist。

一些例子

notion image
notion image
notion image
notion image
notion image
notion image
先全部排序然后再进行交换就可以实现了
notion image
🦄
注意一下操作,就是把一个节点的插入当成是merge就行 需要注意的是如果一个节点的两个子节点都是null,那么默认右节点是null,然后把对应的值插入到左节点就好
notion image
双向队列
notion image
notion image
notion image
🦄
总的来说,题目比较简单,主要记住几个操作的时间复杂度和代码即可
Loading...
fufu酱
fufu酱
一个爱折腾的大学生
公告
👋
欢迎 欢迎来到fufu酱的blog! 💞️我是22级浙江大学竺可桢学院计算机科学与技术专业的学生 一个爱折腾的大学生 🌱我会在这个网站上更新我的笔记和工具分享 🌈目前all in MLLM 📫你可以用下面的方式联系到我
🍀
今後ともよろしくお願いします