一、需求分析
1、理论背景
以哈弗曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。 在
计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称"熵编码法"),用于数据的无
损耗压缩。这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行
编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出
现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的
字 符 串 的 平 均 期 望 长 度 降 低 , 从 而 达 到 无 损 压 缩 数 据 的 目 的 ) 。 这 种 方 法 是 由
David.A.Huffman 发展起来的。 例如,在英文中,e 的出现概率很高,而 z 的出现概率则最
低。当利用哈夫曼编码对一篇英文进行压缩时,e 极有可能用一个位(bit)来表示,而 z 则可
能花去 25 个位(不是 26)。用普通的表示方法时,每个英文字母均占用一个字节(byte),
即 8 个位。二者相比,e 使用了一般编码的 1/8 的长度,z 则使用了 3 倍多。倘若我们能实
现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。
2、功能需求
将任意指定的文本文件中的字符统计后,按 Huffman 编码方式对文件进行编码,并保
存码表及建立的 Huffman 树;用给定的码表对用 Huffman 方式编码的文件进行压缩和解压
缩。
二、概要设计
1.模块分解
2.模块功能说明
编码:读取默认源文件→统计字符及其频数做权值→建立哈弗曼树→对文本进行哈弗曼编码
并输出编码→保存到默认编码文件;
译码:打开默认文件→利用建立好的哈弗曼树进行译码→将译码输出→保存到默认的译码文
件;
退出:退出系统,程序运行结束。
3.系统总流程图
三、详细设计
1. 统计字频
2. 构造哈夫曼树
3. 编码
4. 译码
四、测试结果
1. 源文件
2. 哈夫曼编码文件
3. 编码文件
4. 译码文件