哈夫曼解码编码实现

哈夫曼解码编码实现

课程:《程序设计与数据结构》
班级: 1723
姓名: 严域俊
学号:20172333
实验教师:王志强
实验日期:2018年12月08日
必修/选修:必修

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个英文字母的文件,统计每个字符出现的概率,根据计算的概率构造一颗哈夫曼树。
  • 并完成对英文文件的编码和解码。
  • 要求:
  • (1)准备一个包含26个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率
  • (2)构造哈夫曼树
  • (3)对英文文件进行编码,输出一个编码后的文件
  • (4)对编码文件进行解码,输出一个解码后的文件
  • (5)撰写博客记录实验的设计和实现过程,并将源代码传到码云
  • (6)把实验结果截图上传到云班课

2.实现过程体现:

  • 这一次任务是从文件中获取文本并实现哈夫曼树,通过哈夫曼树来进行编码解码的任务,首先就是建立一个结点类咯图,这个结点类与其他二叉树的类不同的地方在与多了一个变量就是权值,因为哈夫曼树需要根据权值大小进行排序。图

  • 然后就是关键的地方就是如何构建这个哈夫曼树呢?
  • 哈夫曼树是带权路径最短的树,又叫做最优二叉树,其实就是权值越高的越在树根
  • 这个时候就是需要一个排序方法让所有元素从小到大进行排序,每次挑选最小的两个进行组合成新的元素,然后删去这两个元素,加入新的元素在进行排序,重复直到只剩下最大的那个作为哈夫曼树的根。在这次实验中我使用的排序方法是快速排序。图

  • 然后就是给哈夫曼的每个数进行编码,其实也很简单,就是从根开始左边为0右边为1,直到每一个结束。图

  • 其中还有一个步骤就是从文件中取得数据,这个方法我直接在网上随便找找就用了这个。图

  • 最后就是根据编码文件返回赋值文件,代码就是这个,没什么大的原理就是把编码过程返回一下就这样。

3.实验过程中遇到的问题和解决过程

  • 问题1:使用文件进行编码的时候,发现调用不出来数值图

  • 解答1:报错信息上显示的是空指针,我心想什么鬼啊又不是数组,怎么还空指针了,只是单纯调用文件里的东西而已,想了很久,以为是toCharArray不能转换这个数值型的东西,就去查这个方法的受用范围,图

,可是看了很久的确是用于String型的呀,难道我在编写这个TXT文件的时候加了标点符号?,最后检查TXT文本的时候,发现我忘了保存了,之前的输入给我清理了。重新输入之后就不再空指针了。

实验码云地址

其他(感悟、思考等)

参考资料

Java 密码学算法

猜你喜欢

转载自www.cnblogs.com/yanyujun527/p/10109525.html
今日推荐