数据结构学习——优先队列(堆)的基本概念

参考书籍《数据结构与算法分析——C语言描述》 

普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先被访问。(引用百度百科)而堆则正是这种优先队列的具体实现。

堆(二叉堆):是一棵完全被填满的二叉树,有可能的例外是在底层,底层上的元素从左到右填入,这样的树被称为完全二叉树。最大堆和最小堆是二叉堆的两种形式。

 

最大堆:根结点的键值是所有堆结点键值中最大者,并依次递归下去,即子树的键值均小于父亲的键值。

最小堆:根结点的键值是所有堆结点键值中最小者,并依次递归下去,即子树的键值均大于父亲的键值。

d-堆:是二叉堆的简单推广,它恰像一个二叉堆,只是所有的节点都有d个儿子,因此,二叉堆是2-堆。

左式堆:对于堆中的每一个节点X,左儿子的零路径长至少与右儿子的零路径长一样大。左式堆除了保留堆的二叉树属性和最小堆属性外,有一个特征属性:任意节点的左孩子的零路径长(Npl)大于等于右孩子的Npl。这个特性决定了左式堆的不平衡性,并且明显左边会比较深,这就是左式堆的得来。由这个性质和上面提到的性质可以得到:左式堆任意结点的Npl为右孩子的Npl+1.

那么什么又叫零路径长呢?

零路径长Npl:从X到一个没有两个儿子的节点的最短路经长。因此,具有0个或1个儿子的节点的Npl为0。

在下图中:零路径长标记在树的节点内

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值