数据结构——堆

堆、Huffman Trees

(一)性质:

  • Heap的定义:是一颗完全二叉树,根节点为最大或最小
  • 最大堆:任意一个结点值都大于等于任意一个子节点
  • 逻辑上:完全二叉树
    物理上:数组
    堆是一种顺序存储结构(采用数组方式存储)

(二)性质

  • 因为是完全二叉树,所以高度最小

  • 一个具有n个结点的堆的高度是:
    对 [ log(n+1) ]取上整!

  • 只需要logn层:就可以达到n个节点

  • 比较两种构建堆的方法的时间复杂度:
    (1)一个一个进行插入,每次插入最差时间代价为logn(从低移动到顶部),插入n个值的时间代价为nlogn
    (2)先数组成堆后,依次进行shifdown操作,n个的时间复杂度为n,比(1)好得多,也比建立BST平均时间复杂度nlogn和BST最差时间复杂度n^2好得多。

(二)堆的构造: 数组构造
按照complete tree的方法构造

(三)向堆中添加元素
向堆中插入一个值后进行heapifying:
刚开始可能不满足堆的性质,将该值插到最后一个结点,然后对这个结点进行sift up操作:
即和上一个结点进行交换,一直交换。
(三)取出堆中的最大元素:
取出最大的元素(即根节点),和最后一个元素交换,然后对最后一个元素进行sift down操作

(四)Heapify堆化:就是将任意数组整理成堆的形状,通常的做法是遍历数组从0开始添加创建一个新的堆,把当前数组就看做是一个完全二叉树。
然后从最后一个非叶子结点开始进行Sift Down操作就可以了,最后一个非叶子结点就是最后一个结点的父亲结点
注意:越到层次越浅的结点需要连续交换值

建立Huffman 编码树
1、建立、画图
2、编码表
3、会反编码
4、会求位大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值