堆数据结构

(二叉)对数据结构是一种数组对象,可以被视为一种完全二叉树。树中每个节点与数组中存放该节点值得那个元素对应。

表示堆的数组A是一个具有两个属性的对象:length[A]是数组中的元素个数,heap-size[A]是存放在A中的堆的元素的个数。也就是,虽然A[1..length[A]]中都可以包含有效值,但是在heap-size[A]之后的元素都不属于相应的堆。

树的根为A[1],给定某个节点的下标i,其父节点Parent(i)为 i/2 取下限,左儿子Left(i)的下标为 2i, 右儿子为 2i+1。

堆分为最大堆与最小堆(小根堆)。对于最大堆是除了根以外的每个节点i,有A[parent(i)]>=A[i],

最小堆刚好相反,A[parent(i)]<=A[i]

堆排序中使用最大堆,最小堆通常用于构造优先队列。

堆中的高度定义为从本节点到叶子节点的最长简单路径上边的树木,堆的高度是指树根的高度,一个具有n个元素的堆的高度为 lgn 取下限

堆结构上的一些基本操作的运行时间至多与堆的高度成正比 O(lgn)

在高度为h的堆中,最多的元素个数为2h+1-1,最少的元素个数为2h

堆排序的的运行时间为O(n*lgn),空间复制度为O(1)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值