有关哈夫曼树的基础知识和应用

目录

一.哈夫曼树相关基本概念

二.哈夫曼树的构造

1.简单认识哈夫曼

2.构造哈夫曼

三.哈夫曼树的特点

四.有关哈夫曼树的应用


一.哈夫曼树相关基本概念

(1)路径:指从一个结点到另一个结点之间的分支序列。

(2)路径长度:指从一个结点到另一个结点所经过的分支数目。

(3)结点的权:给树的每个结点赋予一个具有某种实际意义的实数,我们称该实数为这个结点的权。

(4)带权路径长度:在树形结构中,我们把从树根到某一结点的路径长度与该结点的权的乘积,叫做该结点的带权路径长度。

(5)树的带权路径长度:树中所有叶子结点的带权路径长度之和,通常记为: 

WPL=\sum_{i=1}^{n}\omega i*\l i

其中n为叶子结点的个数, \omega i 为第i个叶子结点的权值, \l i为第i个叶子结点的路径长度。

二.哈夫曼树的构造

1.简单认识哈夫曼

哈夫曼(Huffman)树又称作最优二叉树,它是n个带权叶子结点构成的所有二叉树中,带权路径长度最小的二叉树。如下图所示

 图一:WPL=9*2+4*2+5*2+2*2=40

图二:WPL=9*1+5*2+4*3+2*3=37

图三:WPL=4x1+2x2+5x3+9x3=50

PS:定义中,一般根节点一层路径长度为0。

很明显,WPL最小的即为哈夫曼树的最优解,不难理解权值越大的结点离根结点越近的二叉树是最优二叉树(这里其实就用到了贪心算法:构造哈夫曼树时优先选择权值小的结点开始)

2.构造哈夫曼

举个栗子:一组权值结点:2   3   32   19   2   1   6   7   10

①把权值按大小进行排序:1   2   3   6   7  10   19   32  

②选最小的两个权值结点,并算出他们的和

 ③选出与5接近的,小于5放左边,大于5放右边,并计算出和

④再选出7和10,作为新的并列结点,并算出11和17的和(如果两个数的和(11)正好是下一步的两个最小数的其中的一个,那么这个树直接往上生长就可以了,如果这两个数的和(11)比较大,不是下一步的两个最小数的其中一个,那么就并列生长。 )

 ⑤再选19.21并计算和,再选32,并计算和

⑥计算最终结果,即为哈夫曼树

三.哈夫曼树的特点

(1)不存在度为1的结点

(2)n个叶子结点的哈夫曼树有2n-1个结点

(3)对于同一组权值,可以有多个不同结构的哈夫曼树,但他们的WPL一定相同

(4)哈夫曼树的任意非叶结点的左右子树交换后仍是哈夫曼树

四.有关哈夫曼树的应用

哈夫曼编码

  • 哈夫曼编码是一种压缩编码的编码算法,是基于哈夫曼树的一种编码方式。哈夫曼树又称为带权路径长度最短的二叉树。
  • 举个栗子:
  • 上面有个现成的哈夫曼树

那么编码就是左子树上的为0,右子树上的为1,再自根结点扫描下来到叶子结点,输出的值就为哈夫曼编码。比如:规定2为a,则a的哈夫曼编码为:10000;规定10为b,则b的哈夫曼编码为1011。可以看出,哈夫曼编码并不难,核心在于构造哈夫曼树。

----ssss¥

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值