[结构] 二叉堆的几个操作
来源:互联网 发布:怀孕b超数据怎么看 编辑:程序博客网 时间:2024/06/05 09:25
二叉堆是一种数组对象,它可以被视为一颗完全二叉树。
MAX-HEAPIFY(A, i)
要求:假设A[i]的两个子树满足堆性质,要求A[i]为根的树也满足堆性质。
方法:从A[i]开始,下降比较即可。T = O(Log N)。
BUILD-MAX-HEAP(A)
要求:把数组A构造成一个最大堆。
方法:自底向上,从有孩子的节点开始,依次对每个节点进行MAX-HEAPIFY操作。
时间:O(N) 时间复杂度的计算,需要求导,比较有趣。
堆排序
要求:利用最大堆进行排序。
方法:先把BUILD-MAX-HEAP(A),然后,交换A[N-1]与A[0],MAX-HEAPIFY(A, 0),下次交换A[N-2]与A[0],MAX-HEAPIFY(A, 0),依次类推。
时间:建堆是O(N),后面的操作是O(N*LogN),时间复杂度还可以。不过算导上说,不如快速排序。
优先级队列支持的几个方法
HEAP-MAXIMUM(A)
要求:直接返回A[0]
HEAP-EXTRACT-MAX(A)
要求:获取最大值后,删除最大值。
方法:与堆排序里的操作类似,A[0] = A[len-1]; len--; MAX-HEAPIFY(A, 0)
HEAP-INCREASE-KEY(A, i, key)
要求:A[i] = key,A[i]变大了。对于最大堆来说,如果是变大了,那么就是向上走。 反之,向下走。
MAX-HEAP-INSERT(A, i, key)
要求:把key放到最后,然后执行一个HEAP-INCREASE-KEY(A, i, key),对于新加的元素,放在数组末端,然后向上走就可以了。
注意:堆排序一般是用最大堆,进行升序排序。djistra单源最短路径算法,使用最小堆构造的优先队列,使用松弛函数的时候,会把堆中的数值改小,那就是MIN-HEAP-DECREASE-KEY(A, i, key),向上走。
- [结构] 二叉堆的几个操作
- (二叉)堆的几个应用
- (二叉)堆的几个应用
- 二叉树-----数组存储结构及操作算法的实现------堆排序
- 堆结构(一) - 二叉堆的原理与实现
- 堆排序以及二叉堆的一些操作
- 二叉堆 操作
- Python实现二叉树存储结构的堆排序
- 二叉堆的实现及其基本存储结构
- 二叉堆(优先队列)的基本操作的测试
- 二叉堆的插入删除等操作C++实现
- 二叉堆的一些基本操作(未完待续)
- 二叉查找树的定义以及几个基本操作
- 数据结构复习——二叉树的几个基本操作
- 二叉堆的实现
- 二叉堆的实现
- 二叉堆的实现
- 二叉堆的实现
- 自定义控件之QQ5.0侧滑效果
- Pixhawk之姿态解算篇(5)_ECF/EKF/GD介绍
- 【分享笔记】使用lint来改善你的代码
- ES6学习之——let、const
- 全局变量与局部变量的区别
- [结构] 二叉堆的几个操作
- centos源码下载网址
- 第一章 分布式系统介绍
- Spring中Bean的生命周期
- Android PDF截取封面:PDF缩略图预览效果
- 15.5节练习
- Android FragmentStatePagerAdapter的写法
- 下载CyanogenMod c8650源代码
- 成员的类模板