这里的堆主要指数据结构中的堆,而非内存中的堆。堆是一种特殊的数据结构,常用来解决优先队列的问题,而逻辑上它具有树的特性,所以也被看做特殊的树。堆分很多种,常见的有二叉堆、二项堆、斐波那契堆、左偏树等。
二叉堆
二叉堆分最大堆、最小堆,二叉堆定义如下
- 二叉堆是一棵完全树(即除了最下层,其它所有层都被填充满,且最下层节点总是从左往右填充)
- 最大堆的任意父节点大于子节点,最小堆的任意父节点小于子节点
建立一个节点数为n的最大/小堆,其时间复杂度为O(n),且进行堆操作时都可以在O(logn)的时间复杂度下完成,所以相比完全排序,时间复杂度低,所以对于需要不完全排序的优先队列场景(比如进程的分配),二叉堆的优势明显。