二叉堆数据结构——应用

Binary heap data structure - Application

据我了解,

二叉堆(数据结构)用于表示优先队列ADT。是一棵满足堆属性的完全二叉树。

Heap 属性 - 如果 A 是 B 的父节点,则节点 A 的键(值)相对于节点 B 的键排序在整个堆上应用相同的顺序。

首先,它帮助我记住术语 heap,如果有理由将此数据结构命名为 heap。因为,我们也用到了堆内存这个词。

heap 在字典中的意思 - 杂乱无章地堆在一起的东西。

问题,

学习Reb-Black树&AVL树数据结构后,

为什么会想到新的数据结构(二叉堆)?

二叉堆是否解决了红黑树或 AVL 树不适合的一组问题?

二叉堆和红黑树的主要区别在于某些操作的性能。

二进制堆

优点

  • 它是一个理想的优先级队列,因为 min/max 元素(取决于您的实现)始终是 O(1) 访问时间,因此无需搜索它。
  • 插入新值的速度也非常快(平均O(1),最坏情况O(log(n))

缺点

  • 随机元素搜索速度慢。

RB 树

优点

  • 更好的搜索和插入性能。

缺点

  • 搜索速度较慢 min/max。
  • 总的来说开销更大。

需要注意的是,RB 树也可以成为很好的调度器,例如 Linux kernel v2.6 中引入的 Completely Fair Scheduler