堆数据结构通常是用堆排序来教授的。堆排序算法的用途有限,因为 Quicksort 在实践中更好。然而,堆数据结构本身被大量使用。以下是堆排序以外的一些用途。
优先队列:使用二叉堆可以有效地实现优先队列,因为它支持 O(logn) 时间内的 insert()、delete() 和 extractmax()、reduceKey() 操作。二项堆和斐波那契堆是二叉堆的变体。这些变体也在 O(logn) 时间内执行联合,这是二进制堆中的 O(n) 操作。堆实现的优先级队列用于图算法,如 Prim 算法和 Dijkstra 算法。
顺序统计:堆数据结构可用于高效地查找数组中第 k 个最小(或最大)元素。有关详细信息,请参阅本文的方法 4 和 6。
参考:
http://net.pku.edu.cn/~course/cs101/2007/resource/Intro2Algorithm/book6/chap07.htm
http://en.wikipedia.org/wiki/Heap_%28data_structure%29
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。