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

来源:互联网 发布:华润漆怎么样 知乎 编辑:程序博客网 时间:2024/05/06 10:53

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

  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
原创粉丝点击