学号 2019-2020-2314《数据结构与面向对象程序设计》哈夫曼编码实践
Posted juminghan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学号 2019-2020-2314《数据结构与面向对象程序设计》哈夫曼编码实践相关的知识,希望对你有一定的参考价值。
学号 2019-2020-2314《数据结构与面向对象程序设计》哈夫曼编码实践
课程:《程序设计与数据结构》
班级: 1823
姓名: 鞠明翰
学号:20182314
实验教师:王志强
实验日期:2019年11月11日
必修/选修: 必修
1.实验内容
设有字符集:S={a,b,c,d,e,f,g,h,i,j,k,l,m,n.o.p.q,r,s,t,u,v,w,x,y,z}。
给定一个包含26个英文字母的文件,统计每个字符出现的概率,根据计算的概率构造一颗哈夫曼树。并完成对英文文件的编码和解码。
要求:
准备一个包含26个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率
构造哈夫曼树
对英文文件进行编码,输出一个编码后的文件
对编码文件进行解码,输出一个解码后的文件
撰写博客记录实验的设计和实现过程,并将源代码传到码云
把实验结果截图上传到云班课
2. 实验过程
一种编码方式,可以通过其算法来减小数据的存储空间,从而达到压缩文件的目的。
主要原理:
计算各个元素出现的频率也就是每个元素所占总元素的权重。根据权重的大小来进行后续的处理。
哈夫曼树,通过树的数据结构来存储数据。哈夫曼树可以不为完全树,其度为2。特点在于,父结点总是给左子树为0,右子树为1。
哈夫曼树的构造。对于所有元素,首先求出其所有的权重。对于这些森林,每次选出权重最小的两棵树,求其和,作为这两棵树的父结点。最终构造出哈夫曼树。根据其构造方法,我们可以发现,权重越大的结点,也就是其对应的元素越靠上,这样做的原因是因为权重越大,出现的愈加频繁,所以,以较短长度来替换出现次数最多的元素。从而使得存储空间得以减少。
广度优先遍历,在得到各个结点的编码时,我们使用广度优先遍历来根据每层来增加一个0或1。不过,哈夫曼树是个树,也就是使用层序遍历来得到每个结点的编码。
3. 实验结果
4.实验中遇到的问题
- 问题1:
不能转换错误。
- 问题1解决方案:
应该是存放node,却存放了node.element。所以不能从String转到HuffmanTreeNode类型。
5.感悟:
哈夫曼树的编码解码也比较有意思,编码的思路自己一开始理清了,解码其实就是一个逆过程,但自己没有想到,直到参看资料才有了思路。
以上是关于学号 2019-2020-2314《数据结构与面向对象程序设计》哈夫曼编码实践的主要内容,如果未能解决你的问题,请参考以下文章
学号20182335 2019-2020-1 《数据结构与面向对象程序设计》实验八报告