贵州闽鼎盛材:Huffman实现文本文件压缩fdg
来源:百度文库 编辑:九乡新闻网 时间:2024/05/09 16:13:01
数据结构课程设计报告【一】
课程设计题目:文本文件压缩【一】
1.
2.
3.
4.
5.
6.
7.
模块及框架设计:
按功能需求,主要分为五个模块
主要模块:
1.
2.
辅助模块:
2.
3.
l
定义:利用算法将文件有损或无损地处理,以达到保留最多文件信息,而令文件体积变小。
在文本文件中,一个ASCII码占用一个字节空间(1Byte),汉字由两个字节构成(区码和位码),区码和位码分别用ASCII码的161-255字符表示,共94*94=8836个【GB2312编码】
即,无论字符还是汉字,均可由ASCII码表示,我们可以以二进制文件形式将一个文本文件读入,分析每个ASCII码的频数,构造huffman树,并得到相应的编码。
编码是由0、1组成的一串数字,出现频率越高的字符,其编码越短,通过这个特性,我们可以将每8位组成一个新的字符(1Byte),输出到压缩文件中,达到压缩的目的。
例如:
已知
如果其中的一段是::abcde 则处理如下:
补上两位
每次取7位【取8位亦可,但此处为了处理最后一个字符,只取7位】
0+7位凑成1Byte,转化为相应AscII码输出
最后一位一般不能刚好凑够8 bit 所以需要补上0
而补上的0的个数记录为补位数 【补位数的处理】
原来:
处理后:2*1Byte=2 Byte
l
字符,即ASCII码,ASCII编码由8位组成,共256个字符,足够表示英文文本。
汉字,是考虑的重点,多方考虑下,我选择了系统支持的GB2312编码表,而非转化为UNICODE编码。GB2312的汉字编码占用两个字节,区码和位码分别由ASCII码表的161-255字符表示,共8836个汉字,足以承担汉字处理,而UNICODE编码表是变长编码,处理困难且不利于压缩。
汉字ASCII码八位1*******
以字符形式读入,每次读入一个字节(1Byte)进行处理,不去判断区分是字符还是汉字,只识别ASCII码,进行处理。
l
读入的字符所需要存储的信息:字符,频数以及各自编码
仅仅以char数组存储将带来非常大的缺陷。
作用:提高效率,减小复杂性
{
char c;//字符
int count;//字符出现的次数
intbit[20];//用于存储huffman编码