基础算法(二)---数据结构之堆

二叉堆:(堆)—>优先队列

  1. 结构性质:堆是一棵被完全堆满的二叉树,有可能的例外在底层,底层从左向右填入
  2. 堆序性质:(让操作快速执行的性质,所有操作保证始终保持堆序性质)【由于我们想要快速找出最小元,因此最小元应在根;如果考虑任意子树也是一个堆,那么任意节点应小于它的所有后裔】

完全二叉树:

  1. 高为h,则有2的h次方到2的(h+1)次方-1个节点
  2. N个节点,则高为LogN向下取整

完全二叉树满足二叉堆的结构性质,可以用一个数组存放:任意的位置i上的元素,其左儿子在2i,右儿子在2i+1,父节点在i/2向下取整

包含2的(h+1)次方-1个节点的理想二叉树的节点的高度和为2的(h+1)次方-1-(h+1)

插入:为了将X插入堆中,在下一个可用位置创建一个空穴,否则该堆将不是完全树

  1. 如果X可以放在该空穴,堆序性质不被破坏,那么插入完成
  2. 否则,将空穴的父节点上的元素放入该空穴,这样空穴就朝着根的方向冒;继续该过程直达X能被放入空穴中为止

删除:找出最小元是容易的,困难的是删除它

当删除一个最小元时,要在根建立一个空穴,由于现在堆中少了一个元素,因此堆中最后一个元素必须移到堆中的某一个位置

  1. 如果X而已被放在空穴中,则删除完成
  2. 一般第一种情况不太可能,因此将空穴的两个儿子中小的一个放在空穴中,这样就把空穴向下推了一层,继续该过直到X能被放入空穴为止
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值