算法快学笔记(七):赫夫曼,赫夫曼树,赫夫曼编码

本文介绍了赫夫曼编码和赫夫曼树的概念及其应用。赫夫曼树是一种最优二叉树,常用于数据压缩。通过构建赫夫曼树,可以实现根据字符出现频率的编码,从而有效减少数据传输的位数。赫夫曼编码的构建过程包括将权值最小的节点合并,直到所有节点合并成一棵树。文章通过实例展示了赫夫曼树的构建步骤和编码解码原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 赫夫曼

鼎鼎大名赫夫曼树以及赫夫曼编码都是出自赫夫曼这位大牛之手,为表致敬先简单的介绍赫夫曼大神。

赫夫曼,全名David Albert Huffman,1925年8月9日-1999年10月7日,生于美国俄亥俄州,计算机科学家,为霍夫曼编码的发明者。

1951年,赫夫曼在麻省理工学院(MIT)攻读博士学位,他为了完成一篇题为<<查找最有效的二进制编码>>的报告,研究出了赫夫曼树。

1952年,于论文《一种构建极小多余编码的方法》(A Method for the Construction of Minimum-Redundancy Codes)中发表了赫夫曼编码。

2. 赫夫曼树

哈夫曼树也叫最优二叉树(哈夫曼树),是赫夫曼编码的理论基础,目前经常使用到的压缩和解压缩技术都是基于赫夫曼的研究基础上发展而来。通过一个例子来展开对赫夫曼树的说明

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

如上代码是百分制考试的评分标准。粗略看上面的代码,貌似没有什么问题。但是通常情况来说一个班级的学生成绩分布在及格、中等、良好的相对较多,分布在优秀和不及格的相对较少。但是上面的代码,最开始的逻辑是先判断是否及格,再逐渐向上得到结果。当输入量很大的时候,算法在效率方面是存在一定问题的。

假设实际中学生在5个等级上成绩分布的概率如下表所示。如果按照上述的代码逻辑执行,70分以上的成绩占总概率的80%,但是想判断出一个70分以上的成绩至少需要执行3次以上的判断才能得到结果,显然是十分不合理的。成绩等级的分布如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值