哈夫曼树——学习笔记

本文介绍了哈夫曼树的概念,它是一种最优二叉树,用于减少数据比较次数和提高效率。通过举例展示了哈夫曼树的构造过程,解释了其在构建时如何通过贪心算法达到最小带权路径长度。此外,还讨论了哈夫曼编码在文件压缩中的应用,指出其在节省存储空间方面的优势。
摘要由CSDN通过智能技术生成

了解哈夫曼树

先看一个例题:
将学生的百分制成绩转换为五分制成绩(编程),90-100:A 80-90:B 70-80:C 60-70: D <60:E
代码如下:

if(score<60)
   grade=='E';
else if(score<70)
        grade=='D';
     else if(score<80)
             grade=='C';
          else if(score<90)
                  grade=='B';
               else(score<100)
                    grade=='A';

同时这个判断的过程也可以画成一个二叉树(因为每个条件都有两个结果)

判断树

是它的名字,然后 它用于描述分类过程的二叉树,图如下

然后我们进一步分析一下,当输入量很大的时候,程序的操作时间,看看我们会发现什么?

实例一 浅了解哈夫曼树(最优二叉树)

假如学生的成绩数据共有10000个,并且二叉树从上到下每个等级占比依次是5%,15%,40%,30%,10%.
那么比较次数依次是:1,2,3,4,4次,所以10000个数据的比较次数为10000*5%*1+10000*15%*2+10000*40%*3+10000*30%*4+10000*10%*4=31500
这就是一个比较庞大的数字了,所以我们将条件顺序更改一下

这种情况下10000个数据的比较次数为:10000*20%*3+10000*80%*2=22000这样看,两种判别树的效率是不一样,虽然这个看起来也不小,但是相对来说减少了1/3呢。
思考:能不能找到一种效率最高的判断树?
这个问题就间接提出了:哈夫曼树 (最优二叉树)

哈夫曼树的基本概念

路径:从树中的一个结点到另一个结点之间的分支构成这两个结点间的路径
结点的路径长度:两结点间路径上的分支数
树的路径长度:从树根到每一个结点的路径长度之和。记做:TL
结点数目相同的二叉树中,完全二叉树是路径长度最短的二叉树
权:将树中结点赋给一个有着某种意义的数值,则该数值称为该结点的权。(例:上面的百分数)
结点的带权路径长度:从根结点到该结点之间的路径长度与该结点的乘积

实例二 深入了解哈夫曼树的‘最优’

例:有4个结点a,b,c,d,权值分别为7,5,2,4,构造以这4个结点为叶子结点的二叉树,并计算其带权路径长度;
这里呢,先看两种

所有叶子结点路径一样
(a) WPL=7+5+2+4*2=36
叶子结点路径不同
(b) WPL=2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值