数据结构学习——优先队列(堆)的基本概念
来源:互联网 发布:淘宝网点不开购物车 编辑:程序博客网 时间:2024/04/29 23:39
参考书籍《数据结构与算法分析——C语言描述》
普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先被访问。(引用百度百科)而堆则正是这种优先队列的具体实现。
堆(二叉堆):是一棵完全被填满的二叉树,有可能的例外是在底层,底层上的元素从左到右填入,这样的树被称为完全二叉树。最大堆和最小堆是二叉堆的两种形式。
最大堆:根结点的键值是所有堆结点键值中最大者,并依次递归下去,即子树的键值均小于父亲的键值。
最小堆:根结点的键值是所有堆结点键值中最小者,并依次递归下去,即子树的键值均大于父亲的键值。
d-堆:是二叉堆的简单推广,它恰像一个二叉堆,只是所有的节点都有d个儿子,因此,二叉堆是2-堆。
左式堆:对于堆中的每一个节点X,左儿子的零路径长至少与右儿子的零路径长一样大。左式堆除了保留堆的二叉树属性和最小堆属性外,有一个特征属性:任意节点的左孩子的零路径长(Npl)大于等于右孩子的Npl。这个特性决定了左式堆的不平衡性,并且明显左边会比较深,这就是左式堆的得来。由这个性质和上面提到的性质可以得到:左式堆任意结点的Npl为右孩子的Npl+1.
那么什么又叫零路径长呢?
零路径长Npl:从X到一个没有两个儿子的节点的最短路经长。因此,具有0个或1个儿子的节点的Npl为0。
在下图中:零路径长标记在树的节点内
0 0
- 数据结构学习——优先队列(堆)的基本概念
- 数据结构——优先队列(堆)
- 数据结构--优先队列(堆)的实现
- 基于 Python 的数据结构与算法分析学习记录(6-8)—— 基于二叉堆的优先队列
- 数据结构---->优先队列(堆)
- [数据结构].堆(优先队列)
- 数据结构学习笔记(六)堆-优先队列
- 【数据结构】优先队列,堆
- 数据结构:优先队列--堆
- 数据结构(Java)——优先队列和堆
- 优先队列 - 数据结构 (二叉堆)
- 【数据结构】回顾优先队列(堆)
- 《数据结构》C++代码 堆(优先队列)
- 【数据结构——优先队列】优先队列的各种运用
- 数据结构与算法——优先队列类的C++实现(二叉堆)
- ACM常用模板——数据结构——优先队列(堆)
- 深入浅出数据结构C语言版(15)——优先队列(堆)
- 深入浅出数据结构C语言版(15)——优先队列(堆)
- 主键和索引
- Qt Creator 根据已有的CMakeList.txt创建CMake工程
- Zookeeper集群shell操作
- Eclipse搭建Android开发环境
- C#中的Action<>和Func<>以及传统的委托
- 数据结构学习——优先队列(堆)的基本概念
- Android Framework------之PowerManagerService的功能
- 目前比较全的CSS重设(reset)方法总结
- haha
- hdu 1285 确定比赛名次
- JQuery操作checkbox、radio
- $ ns Error: Cannot open shared library: No such file or directory
- 类似微信,平缓加载更多消息
- protocol、ARC、block