学习笔记
堆:
- O(1)的时间获取最大值(大顶堆)或者最小值(小顶堆),内部实现有很多,二叉堆是其中容易实现的,但效率不是最高的。
- 完全二叉树可以用数组来实现,实现是层序遍历。左孩子index是2*i+1,右孩子index是2i+2。索引父节点是floor((i-1)/2)
- 为了保证堆是一个完全二叉树,所以删除和添加的工作全部都是通过操作堆的最后一个元素,然后进行逐步调整。这种方式的亮点可以保证二叉树仍然保持完全二叉树。
- 工程中堆是Priority_Queue的实现。
- 在实战例子中可以发现,堆一般用来获取前K个高或低的元素。排序也可以做到,但是堆的优势就是性能比排序高。