笔记
一 . 堆的定义
1.堆是一个完全二叉树
2.完全二叉树的根节点与左右节点存在关系
根节点在数组中为第 i 个,它的左节点为第 2*i 个,右节点为第 2*i+1 个。
二 . 堆的添加
向堆中添加元素的思路如下:
1.在堆尾加入这个元素,并把它标志为当前节点
2.比较当前节点a(下标 i )和它父节点b(下标i/2)的大小
如果a<b,则swap(a,b),并把a标志为当前节点,继续;
如果a>=b,则退出。
三 . 堆的删除
从堆中取出并删除这个元素的思路如下:(小根堆)
1.取出堆的根节点的值
2.把堆的最后一个节点放到根上,覆盖掉根,节点数减1。
3.调整以满足堆(这里是小根堆)的性质。
四 . STL实现堆
模板题: 洛谷 P3378 【模板】堆 (小根堆)
题目描述
给定一个数列,初始为空,请支持下面三种操作:
- 给定一个整数 x,请将 x 加入到数列中。
- 输出数列中最小的数。
- 删除数列中最小的数(如果有多个数最小,只删除 1 个)。