一、需求分析:
在日常的工作生活中,出于文件存储、传输的要求,需要对文件进行压缩。Huffman压缩是基于哈夫曼树而进行压缩的一种无损压缩算法。
Huffman算法是一种基于统计的压缩方法。它的本质就是对文本文件中的字符进行重新编码,对于使用频率越高的字符,其编码也越短。
二、概要设计:
要设计一套压缩软件,最核心的部分即是算法,具体在于建树与生成编码的过程。
同时,还需要制定一套合理,完善的存储规则。
自然,软件必须分为两部分:压缩部分与解压缩部分。
于是软件整体框架即设计为:
三、详细设计:
1、建哈夫曼树
针对哈夫曼建树的算法,本程序使用了有序链表的数据结构来存储各个哈夫曼节点,并通过二叉树的数据结构来完成建树的过程。 通过中序遍历来完成对编码的读取。
其中,哈夫曼节点的数据结构为:
名称、哈夫曼编码长度、哈夫曼编码(String)
2、文件存储的规则
(1)四个字节:
文件的验证属性码:h m r q 。
(2)一个字节
原文件名的长度n
(3)n个字节
文件名(仅考虑文件名为英文名的情况)
(4)256个字节
0-255这256个数对应的哈夫曼编码的长度
(5)n个字节
存诸256个数据的哈夫曼编码
(6)n个字节
文件数据对应的哈夫曼编码
(7)最后一个字节
前一字节有多少个位是无效的。
四、程序结构
1、程序结构说明:
本程序采用模块化设计方法,各个功能的实现都有具体的方法,在主函数调用相应的方法即可实现程序的要求。程序的整体性很强。
2、重要数据说明:
哈夫曼结点:
public class HuffmanNode {
public int data;//用来存放数据
public int times;//用来存放该数据出现次数
public HuffmanNode lChild;//左孩子
public HuffmanNode rChild;//右孩子
}
链表结点:
public class UserLineNode<E> {
public E data;//存放数据
public UserLineNode next;//存放下一个结点
}
3、函数清单:
建哈夫曼树部分:
/*
*util the frist node
*/
public void uNode()
/*
* 按大小顺序插入
*/
public void shuxuIn()
/*
* 定义一个遍历及生成哈夫曼编码的方法
*/
public void traverSal()
压缩部分:
//定义一个方法,读取数据并记录各个字节数出现频次
public void readFile()
//定义一个方法,将压缩的编码写入
public void writeFile(String fileName)
//将一个八位的字符串转成一个整数
public int changeString(String s)
解压缩部分:
/*
* 定义一个将int 转为8位的String 的方法
*/
public String changeint(int n)
/*
* 定义一个找点合适分开点n 的方法
*/
public int search(String s)
/**
* 定义一个译码的方法
*/
public void Decode()
五、调试分析:
1、程序截图:
2、程序调试
在建立一个进度条的过程中发现由于压缩(或解压缩)在运行中占用了构建进度条的资源,导致进度条不能正常显示,使用线程后问题得到解决。
遇到解压缩后文件少写一个字节的问题,对压缩部分中重新检查排错后问题得到解决。
六、总结:
1、程序设计难点:
本程序的难点在于建哈夫曼树及生成文件规则的制定。
2、程序设计中的不足:
本程序功能上实现了哈夫曼压缩,但是在物理、及时间复杂性上还有待优化。
3、训练体会:
这次训练使我加深了对软件设计的理解。
设计一个软件必须首先有一个总体的十分明确的构架,构架设计好后再根据构架一步步完成设计这样设计效率会很高也会避免许多错误出现。
- 大小: 31.7 KB
- 大小: 12.6 KB
- 大小: 13.2 KB
- 大小: 59.3 KB
分享到:
相关推荐
哈夫曼算法压缩jpeg算法源码+项目说明.zip哈夫曼算法压缩jpeg算法源码+项目说明.zip哈夫曼算法压缩jpeg算法源码+项目说明.zip哈夫曼算法压缩jpeg算法源码+项目说明.zip哈夫曼算法压缩jpeg算法...
利用哈夫曼算法进行文件的压缩和解压缩。 利用命令行对指定的文件进行压缩和解压缩。 能对一般的文本文件有较好的压缩能力,对其它格式文件可以进行压缩但不一定能有压缩效果。对于用此程序压缩的文件可以用此程序...
哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩源码.zip哈夫曼压缩与解压缩...
vc++哈夫曼压缩算法 vc++哈夫曼压缩算法
这是我做的一个基于哈夫曼树思想的压缩算法程序源码,希望大家指正
利用C++实现哈夫曼算法,算法简单易懂,在vs2010上运行
1.哈夫曼编码是广泛地用于数据文件压缩的十分有效的编码方法。给出文件中各个字符出现的频率,求各个字符的哈夫曼编码方案。
哈夫曼数据压缩算法的实现及性能分析.doc
哈夫曼压缩算法的c++实现,你可以学习到你想学的 这也是一个经典的算法设计题
使用哈夫曼编码实现对文本文件的压缩和解压缩
哈夫曼压缩算法,使用c#编写,先统计输入字串的权重,权重越大越靠近根节点
摘要:全面介绍了范式哈夫曼算法的理论基础和实现方式。详细讨论了编码位长计算、限制编码位长、解码优化、码表二次压缩等实现技术。并给出了一个切实可行的应用程序。
该代码实现哈夫曼基本算法,并对输入的图片进行压缩,最终输出译码后的图片,代码真实可用,想理解学习哈夫曼压缩的同学可以看看。
哈夫曼编码算法实现 C实现 实验说明及实现文档
java实现的哈夫曼压缩算法,有swing界面。
了解huffman算法实现的步骤及过程,并附有具体的案例以及答案了解huffman算法实现的步骤及过程,并附有具体的案例以及答案,了解huffman算法实现的步骤及过程,并附有具体的案例以及答案了解huffman算法实现的步骤及...
使用哈夫曼算法实现的文件压缩(源代码+实现报告)
哈夫曼压缩与解压缩程序(JAVA)
NULL 博文链接:https://1471080924.iteye.com/blog/2154500