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次以上的判断才能得到结果,显然是十分不合理的。成绩等级的分布如下: