堆 最大堆 最小堆 堆排序 优先队列

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
父节点>=子节点
基本维护操作
MAX-HEAPIFY(i)
维护函数,接受一个父节点i
将父节点,子节点中的最大值
与父节点交换 向下递归
将一个无序数组变为一个最 大堆
For(i=n/2;i>=1;i--)

MAX_HEAPIFY(i)
4 1
2 14
8
4 2
1
3
16
5
3
9
6
10
7
8
9
7
10
交换 重复
插入
O(logn)
另一种建堆方法
从空堆开始
每次将新元素插入
删除
将堆顶元素取出
将末尾元素移至堆顶 对堆顶维护
删除
O(logn)
还有更高端的
二项堆
斐波那契堆 详见算导……
还有…..
STL!
关于堆的题目
Who's in the Middle
水题
据说连冒泡都能过………….. 仅当练习堆排序…………
4 1
14
4 2
1
3
16
5
3
9
6
10
7
2
8
8
9
7
10
4 1
14
4 2
1
10
3
16
5
9
6
3
7
2
8
8
9
7
10
4 16
2
1
10
3
14
4
1 8
9
5
9
6
3
7
2
8
7
10
4 16
2
1
10
3
14
4
7 8
9
5
9
6
3
7
2
8
1
10
16
1
4
14
4
2
10
3
7 8
9
5
9
6
3
7
2
8
1
10
16
1
14
2
10
3
4 2
8
4
7 8
9
5
9
6
3
7
1
10
16
1
14
2
10
3
8 2
8
4
7 4
9
5
9
6
3
7
1
10
最大堆完成
时间复杂度O(n)
排序
很简单
带有优先队列的选择排序
方法
建立一个最大堆
将最大的元素与最后一个
元素交换 维护堆顶
16
1
14
2
10
3
8 2
8
4
7 4
9
5
9
6
3
7
1
10
1 14
2
1
10
3
8 2
8
4
7 4
The kth great number
优先队列的应用
Argus
优先队列的应用
Fence Repair
优先队列的应用
注意!long
long
Black Box
多种做法
线段树,红黑树,SBT 推荐优先队列
Sliding Window
多种做法
线段树 推荐优先队列

堆能干什么
堆排序
优先级队列
堆是什么
完全二叉树!
关于二叉树
14
2
16
1
节点数 n 高度 logn 父节点 i 左子节点 2*i 右子节点2*i+1
10
3
8
8
4
7 4
9
5
9
6
3
7
2
16
1
1
4
10
14
2
10
3
8
7
5
9
6
3
7
2
8
4
9
1
10
堆支持的操作
插入
删除 排序
关键是怎样维护……
保持堆的性质
9
5
9
6
3
7
16
10
14
1
8
4 2
8
4
2
10
3
7 1
9
5
9
6
3
7
16
10
1 8
4 2
8
4 2
1
10
3
7 14
9
5
9
6
3
7
16
10
10
1
8
4 2
8
4
2
9
7
5
3
1
6
3
7
14
9
16Leabharlann 10…………..排序的时间效率
运行n次
每次维护logn O(nlogn)
优先级队列
插入
将新元素插入最后
如果父节点小于该元素,
相关文档
最新文档