你所不知道的数据结构——堆合集

· · 个人记录

前排提示:本文包含二叉堆、多叉堆、配对堆、左偏树、斜堆、二项堆、lazy 二项堆、rank 配对堆、Fibonacci 堆、Brodal 队列、基数堆。

参考资料:

https://www.luogu.com.cn/blog/uakioi/radix-heaps-and-dij

首先扔复杂度:

操作 创建空堆 插入 查找最小值 删除最小值 合并 减小节点值 删除节点 均摊 or 最坏?
二叉堆 O(1) O(\log n) O(1) O(\log n) O(n) O(\log n) O(\log n) 最坏
m 叉堆 O(1) O(\log_mn) O(1) O(m\log_mn) O(n) O(\log_mn) O(m\log_mn) 最坏
配对堆 O(1) O(1) O(1) O(\log n) O(1) 下界 O(\log\log n),上界 O(2^{2\sqrt{\log\log n}}) O(\log n) 均摊
左偏树 O(1) O(\log n) O(1) O(\log n) O(\log n) O(\log n) O(\log n) 最坏
斜堆 O(1) O(\log n) O(1) O(\log n) O(\log n) 不适用 不适用 均摊
二项堆 O(1) O(\log n) O(\log n) O(\log n) O(\log n) O(\log n) O(\log n) 最坏
lazy 二项堆 O(1) O(1) O(1) O(\log n) O(\log n) O(\log n) O(\log n) 均摊
Fibonacci 堆 O(1) O(1) O(1) O(\log n) O(1) O(1) O(\log n) 均摊
rank 配对堆 O(1) O(1) O(1) O(\log n) O(1) O(1) O(\log n) 均摊
Brodal 队列 O(1) O(1) O(1) O(\log n) O(1) O(1) O(\log n) 最坏

先提前说一下:除左偏树外,所有堆实现删除节点都是先减值为 -\infty 然后删除最小值,所以下面就不说了。

标题大小不太容易区分,为了避免没有层次我就扔云剪贴板了。