哈夫曼树及其应用

一、背景知识

  • 节点的:有某种现实含义的数值(如表示结点的重要性)
  • 结点的带权路径长度:从根到该结点的路径长度与该结点上的权值相乘
  • 树的带权路径长度:树的所有叶结点的带权路径长度之和(Weighted Path Length,WPL)

二、哈夫曼树

1、定义:

在含有n个带权叶结点的二叉树中,WPL最小的二叉树,也称最优二叉树

2、构造:

(1)将n个结点看作n棵只含有一个结点的二叉树,构成森林F
(2)构造一个新结点,从F中选择二棵根节点权值最小的树作为其左右子树,并将新结点的权值置为二者权值之和
(3)将新得到的树加入F中,并删除原来选择的两棵树
(4)重复步骤(2)和(3),直至F中只剩下一棵树

3、性质:

(1)每个初始结点都会变成叶结点,且权值越小离根节点越远
(2)结点总数为2n-1
(3)不存在度为1的结点
(4)构造并不唯一,但WPL必然相同且最优

4、哈夫曼编码:

情景设置:考场上,小渣想找老八要数学选择题的答案假设100题中有80题选C,10题选A,8题选B,2题选D,那么老八如何传递答案才能效率最高呢?(温馨提示:诚信考试,不要向主人公学习哦)

  • 固定长度编码:每个字符用相等长度的二进制位表示
    如:A为00,B为01,C为10,D为11,则WPL=100*2=200
  • 可变长度编码:允许用不等长的二进制位表示不同字符
    如:C=0,A为10,B为111,D为110(没错,之所以这样假设,是为了使WPL最小),WPL=80x1+10x2+8x3+2x3=130

Os:这个你可能会问了,那我将A改为1,WPL不是更小吗?
确实,因此我们要引出下一个概念

  • 前缀编码:指的是没有一个编码是其他编码的前缀
    如果将A改为1,那么CAAABD:0111111110,毫无疑问,这个非前缀编码是有歧义

此时我们可以利用之前的方法,将字符集的每个字符作为一个叶结点,出现频率作为结点的权值,构造哈夫曼树
Ps:哈夫曼树不唯一,所以哈夫曼编码也不唯一。对了,哈夫曼编码可用于数据压缩,非常厉害

三、总结:

这是我们第一次体会到算法在实际场景中的应用,让我们真切地感受到算法的学习不是枯燥无味,它给计算机的发展提供了巨大的帮助,它的背后蕴含着无穷的能量,期待着我们去学习、去热爱、去探索、去创造

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值