数据结构第五章(堆、哈夫曼树、哈夫曼编码)

什么是堆?

堆是按照一定顺序组织的完全二叉树

 

优先队列:特殊的“队列”,取出元素的顺序是依照元素的优先权(关键字)大小

                 而不是元素进入队列的先后顺序。

是否可以采用二叉树存储结构?可以,查找与删除的时间复杂度均为以2为底n的对数即log(2)n

二叉搜索树?

如果采用二叉树结构,应更关注插入还是删除?(删除)

       树结点顺序怎么安排?

       树结构怎样?

扫描二维码关注公众号,回复: 5330878 查看本文章

 

堆的两个特性:

结构性:用数组表示的完全二叉树

有序性:任意结点的关键字是其子树所有结点的最大值(或最小值)

       “最大堆”也称“大顶堆”:最大值

       “最小堆”也称“小顶堆”:最小值

堆中任一路径上的元素都是有序的

 

 

 

堆的应用“:堆排序

在堆删除操作中一个主要问题是  已知左边是个堆,右边是个堆,插入一个新元素,二叉树中元素该如何动

 

如何根据结点不同的查找频率构造更有效的搜索树?

 

带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带有权值W(k),从根节点到每个叶子结点的长度为l(k),则每个叶子结点的带权路径长度之和就是

 

 

哈夫曼树(也称最优二叉树)的定义:WPL最小的二叉树

 

哈夫曼树的特点

没有度为1的结点

N个叶子结点的哈夫曼树共有2n-1个结点

哈夫曼树的任意非叶节点的左右子树交换后仍是哈夫曼树

 

 

二叉树用于编码:

用二叉树进行编码

  1. 左右分支:0,1
  2. 字符只在叶节点上

对同一组权值{w1,w2,….,wn}是否存在不同构的两棵哈夫曼树呢?存在,比如

 

 

 

哈夫曼树的构造:

每次把权值最小的两棵二叉树合并,

 

猜你喜欢

转载自blog.csdn.net/a13683857889/article/details/87366515