二叉堆数据结构——应用
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。
据我了解,
二叉堆(数据结构)用于表示优先队列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。