数据结构 树 哈夫曼树-详细介绍

哈夫曼树及其应用

一.最优二叉树(哈夫曼树)

1.树的路径长度
树的路径长度是从树根到树中每一结点的路径长度之和。在结点数目相同的二叉树中,完全二叉树的路径长度最短。

2.树的带权路径长度(WPL)
结点的全:在一些应用中,赋予树中结点的一个有某种意义的实数。
结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积。
树的带权路径长度(WPL):定义为树中所有叶结点的带权路径长度之和。

最优二叉树或哈夫曼树
带权路径长度WPL最小的二叉树称为最优二叉树或哈夫曼树

在这里插入图片描述
结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积
树的带权路径长度(WPL):定义树中所有叶节点的带权路径长度之和

二、哈夫曼算法
1.构造哈夫曼树的方法

a.将给定的权值按照从小到大排列成{W1,W2…Wm},并且构造出的树林F={T,T2…Tm}.此时其中的每棵树Ti(1<=i<=m)为左、右子树均为空的二叉树,二叉树的根结点的值权值为Wi.

b.把F中树根结点的权值最小的两棵二叉树T1和T2合并为一棵新的二叉树T(T的左子树为T1,右子树为T2),并令T的根结点的权值为T1和T2的根结点的权值之和,然后将T按其结点的权值大小依次加入到森林F中。同时,从F中删去T1和T2这两棵二叉树。

c.重复步骤b,直到构造成一棵哈夫曼树。

在这里插入图片描述

2.哈夫曼树的特点:

a.在哈夫曼树中,权值越大的叶子离根结点越近。
b.若有n0个权值,需要进行n0-1次合并,构造成哈夫曼树。
c.哈夫曼树没有度为1的结点
d.由n0个权值构成的哈夫曼树,叶结点数为n0,度为2的节点数为n0-1,结点总数为n0+n2=n0+n0-1=2n0-1;
e.给定一组权值,构造出的哈夫曼树的形态可能不唯一,但他们的带权路径长度都一样。

三.哈夫曼编码
1、编码的概念
(1)编码和解码
数据压缩过程称为编码。即将文件中的每个字符均转换为一个唯一的二进制位串 。
数据解压的过程称为解码。即将二进制位串转换为对应的字符。

(2)前缀码方案
对字符集进行编码时,要求字符集中任一字符的编码都不是其它字符的编码的前缀,这种编码称为前缀码。

在这里插入图片描述
b

2.哈夫曼编码
设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作为权构造一棵哈夫曼树,由哈夫曼是求得编码就是哈夫曼编码。

用2,3,7,10,11,13,26,28构造哈夫曼树,左孩子的权值不大于右孩子,并求出编码
在这里插入图片描述

在这里插入图片描述

小结:介绍了一般树和二叉树的基本概念。主要介绍了四种不同的遍历二叉树算法,前三种主要的区别在于一个结点本身与它左右子树中结点的处理采用了不同的次序,而层次遍历与其他都不同。

遍历二叉树是一个重点,另一个重点就是哈夫曼算法生成哈夫曼树和构造哈夫曼编码。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值