数据结构(十五)— 树结构之赫夫曼树及其应用

现在我们都是讲究效率的社会,什么都要求速度, 在不能出错的情况下,做任何事情都讲究越快越好。在计算机和互联网技术中,文本压缩就是一个非常重要的技术。 玩电脑的人几乎都会应用压缩和解压缩软件来处理文档。 因为它除了可以减少文档在磁盘上的空间外,还有重要的一点,就是我们可以在网络上以压缩的形式传输大量数据,使得保存和传递都更加高效。

那么压缩而不出错是如何做到的呢?简单说,就是把我们要压缩的文本进行重新编码,以减少不必要的空间。尽管现在最新技术在编码上已经很好很强大,但这一切都来自于曾经的技术积累,我们今天就来介绍一下最基本的压缩编码方法一一赫夫曼编码。

赫夫曼树

在介绍赫夫曼编码前,我们必须得介绍赫夫曼树,什么叫做赫夫曼树呢?我们先来看一个例子。
过去我们小学、中学一般考试都是用百分制来表示学科成绩的。对于老师来讲,他在对试卷评分的时候,显然不能凭感觉给优良或及格不及格等成绩,因此一般都还是按照百分制算出每个学生的成绩后,再根据统一的标准换算得出五级分制的成绩。比如下面的代码就实现了这样的转换。

if ( a < 60 ) {
  b = "不及格" ;
} else if ( a < 70 ){
  b = "及格" ;
} else if ( a < 80 ) {
  b = "中等“ ;
} else if ( a < 90 ) { 
  b = "良好 " ;
} else {
  b = "优秀" :
}  

根据上面的代码,转换成下图,粗略看没什么问题,可是通常都认为,一张好的考卷应该是让学生成绩大部分处于中等或良好的范围,优秀和不及格都应该较少才对。而上面这样的程序,就使得所有的成绩都需要先判断是否及格,再逐级而上得到结果。输入量很大的时候,其实算法是有效率问题的。在这里插入图片描述
如果在实际的学习生活中,学生的成绩在 5 个等级上的分布规律下图所示:
在这里插入图片描述
那么 70 分以上大约占总数 80% 的成绩都需要经过 3 次以上的判断才可以得到结果,这显然不合理。

有没有好一些的办法呢?仔细观察发现,中等成绩 (70-79 分之间)比例最高,其次是良好成绩,不及格的所占比例最少。我们把上面的二叉树重新进行分配。 改成如下图的做法试试看。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值