堆
定义:堆是一个完全的二叉树,每个节点都满足(任一父节点的键值都不小于子节点的键值)
非升序排列的二叉树
存储的方式
- 根节点存在H[1]
- 节点H[i]左右子节点存在H[2i]、H[2i+1]
- 节点H[j]父节点为
基本操作
make-heap nlog(n) 即
insert
shift-down
insert(H,x) 插入所需时间为O(logn)树的高度
delete(H,i)
delete-max(H)
辅助运算
- Shift-up
- Shift-down
堆排序
- 创建最大堆
- 把根节点与最后一个节点交换
- 再创建最大堆
- 再交换
不相交集(Disjoint Sets)
- 每个元素不相同
- 可以用树表示
路径压缩师,秩不会变