| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 哈夫曼编译码器 -> 正文阅读 |
|
[数据结构与算法]哈夫曼编译码器 |
哈夫曼编译码器我课设选择的题目是哈夫曼编译码器,类似于我们平时用的解压缩软件,可以把大文件压缩成一个较小的文件。 设计目的数据结构课程设计的主要目的是使学生通过系统分析、系统设计、编程调试、写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用,进一步提高分析问题和解决问题的能力,提高程序设计水平。 设计内容哈夫曼编译码器
概要设计压缩解压缩界面: 压缩功能压缩功能是按照文件里面的各个元素按照权值(即元素出现的次数)形成哈夫曼树,再通过遍历形成的哈夫曼树形成哈夫曼编码,再对形成的哈夫曼编码进行按位压缩(即每8位形成一个字节),最后将按位压缩后的编码、哈夫曼树的元素以及这些元素对应的权值和该文件的名字格式写入压缩文件里面方便进行下一次解压缩操作。 解压缩功能解压缩功能流程跟压缩的流程差不多,同样是读取文件,将压缩时存进文件里面的信息读取出来,首先根据读取到字节数组重新恢复哈夫曼编码,然后根据读取到的哈夫曼树的信息重新创建哈夫曼树,再遍历哈夫曼树重新形成哈夫曼编码集合,遍历哈夫曼编码重新形成字符数组,根据字符数组恢复原来的字节数组,最后使用得出的字节数组恢复原来的文件即可得到压缩前的文件。 功能模块图各个模块详细的功能描述压缩待压缩文件读取: 解压缩读取压缩文件: 详细设计功能函数的调用关系各功能函数的数据流程图重点设计及编码将哈夫曼编码按位进行压缩的操作
对哈夫曼编码重新恢复成字符数组的操作
测试数据及运行结果正常测试数据和运行结果解压缩txt文件压缩前: 压缩完:
控制台输出: 输出哈夫曼树节点信息、哈夫曼编码、哈夫曼编码长度、压缩比率等 解压缩mp4文件解压前: 压缩后: 解压后: 控制台输出: 输出哈夫曼树节点信息、哈夫曼编码、哈夫曼编码长度、压缩比率等 异常测试数据及运行结果压缩大文件报错: 这是因为 Java 虚拟机的堆内存不足导致的报错,这个我得吐槽一下,当初做的匆忙,直接用 String 类型存的编码,导致压缩不了太大的文件… 压缩空文件报错: 这是因为没有加入文件判空的判断(因为当时想着不会有人压缩一个空文件…吧,好吧,还真有人会压缩空文件) 调试情况,设计技巧及体会改进方案现在的哈夫曼编译码器基本实现了实验要求的功能,但是还是有一定的不足和改进的空间的,如下:
体会这次课设令我收获颇多,将课上学习到的哈夫曼树的知识应用到实际上并做出了一个程序,知道了如何使用代码创建哈夫曼树,创建完后如何将哈夫曼树转为哈夫曼编码,课设之前以为转化为哈夫曼编码再存到文件里面就能实现文件的压缩了,但在写程序的时候才发现这样反而使得文件变得更大了,想要达到压缩的要求,还需要对获得的哈夫曼编码进行按位压缩,按位压缩即将”01”哈夫曼编码按照8位重新压缩成一个字节,理论上数据重复度非常高的时候能使内存减少7到8倍,这样才能使文件达到压缩的效果,而且为了能解压缩,还要往文件里面记录哈夫曼树的信息来恢复哈夫曼树。 参考文献参考文献多是学校教材…虽然我好像多数是直接上百度查的… [1] 王曙燕.数据结构与算法. 北京:高等教育出版社. 2019 最后项目地址如下: PS:也可以到我的个人博客查看更多内容 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 17:20:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |