算法导论 第六章 二叉堆

前言

   通常的编程学习中,我们都会接触到堆这种树结构,本篇博客主要讨论最常见的二叉堆,并将其和斐波那契堆二项堆进行一些比较。


二叉堆的定义

    二叉堆顾名思义是形如二叉树的堆,而且是完全二叉树,不过其底层实现通常都是用的数组。因为如果将其从上到下,从左到右依次从1开始编号,正好可以填满数组的前部分,更重要的是实现简单高效,编号此时即为数组索引。如下图即为一个最大堆:


对于第i个节点,其父母索引为:i / 2;

其左孩子索引为:2i,右孩子索引为:2i + 1。


二叉堆的特性和用途

   堆有最大堆和最小堆两种,前者中父节点关键字总是比左右孩子大,同时左子堆和右子堆也是这样;后者反之。

  

   堆最大的用于是用来实现优先级队列,根据最大堆和最小堆之分,则可以有最小优先级队列和最大优先级队列

此外,还可以用来实现堆排序,本篇博客不讨论。


二叉堆的操作

1、insert:向堆中插入一个元素,并保持堆的特性;

2、maximum:返回堆中最大关键字;

3、extractMax:抽取堆中的最大关键字,并保持堆特性;

3、increaseKey:增加某一节点的关键字值,并保持堆的特性。


inset

   算法流程:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值