- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Huffman压缩和解压
一、?需求分析
1. 本演示程序中,模拟的是小写26个英文字母的Huffman压缩,字母小随机函数随机产生,后统计字母个数建立Huffman树,用建立Huffman树将字母转为二进制流,再将二进制流每次分8个转为一个Unsigned Char写入物理内存!
2. 解压时建立同样的Huffman树或读取已保存的Huffman树,通过将读取的Unsigned Char转为比特流,再由比特流得到原被压缩的字母
3. 程序执行的命令有:随机文件的产生,文件统计,Huffman树的建立,压缩,解压,程序的运行过程和其它信息的文件存储!
4. 程序测试:运行程序,产生随机文件input.txt,压缩时得到的比特流bytes.txt,压缩文件compress.txt,解压时到得的比特流uncompress.txt,解压后文件output.txt和程序的运行过程文件Run.txt,其中红色文件为可无文件
二、?概要设计
1. 为达到压缩效果,采用Huffman树来进行编码压缩
2. Huffman编码后若直接保存比特流至txt将达不到压缩的效果,因此建议将比特流转为Unsigned char 来间接存储以达到明显的压缩效果
3. 解压时因用到之前的Huffman树,因此在压缩时有必要保存树的状态
4. Huffman树在压缩时直接使用对应编码即可,在解压时通过遍历树来得到被编码的字母
三、?详细设计
1. 树结构体的定义和全局变量的定义:
typedef struct HTNode{/*Huffman Tree 的结构定义*/
??? unsigned int weight;
??? unsigned int parent, lchild, rchild;
}HTNode,* HuffmanTree;
typedef char** HuffmanCode;/*指向字符指针的指针的数据的定义*/
int stat[27];/*存储总数,存储26个字母出现的次数*/
HuffmanTree HT;
??????? HuffmanCode HC;
2. 随机文件的产生函数:
void CreatFile(){/*自动产生文件*/
??? FILE *Fopen,*Fout;
??? int i;
??? srand( (unsigned)time(NULL));
??? Fout=fopen(./Run.txt,w);
??? fprintf(Fout,NO.1: Creating a file by rand()n);
??? Fopen = fopen(./input.txt, w);
??? for(i=0; i10000; i++){
??????? char ch=(char)(97+rand()%26);
??????? fputc(ch, Fopen);
?????? }
??? fclose(Fopen);
??? fclose(Fout);
}
3. 字母个数的统计:
void ReadStat(char *Filename){/*每个字符出现的次数统计*/
??? int c;
??? FILE *Fopen=fopen(Filename, r);
??? while((c=fgetc(Fopen))!=EOF){
??????? stat[c%96]++;
??????? stat[0]++;
??? }
}
4. 选择HT[1…i-1]中Parent为0且Weight最小的一个点的函数:
void Select(HuffmanTree HT, int d, int *s){
??? int temp=0,i;
??? for(i=1; i=d; i++){
?????????? if(HT[i].parent!=0)
????????????????? continue;
?????????? if(temp==0)
????????????????? temp=i;
?????????? else if(HT[temp].weightHT[i].weight)
????????????????? temp=i;
??? }
??? *s=temp;
}
5. Huffman树的建立函数:
void HuffmanCoding(int* w, int n){
??? int m= 2*n-1;
??? int i, s1, s2, start;
??? unsigned int c, f;
??? char *cd;
??? if(n=1)
?????????? return;
??? HT=(HTNode*)malloc((m+1)*sizeof(HTNode));/*0号单元未用*/
???
您可能关注的文档
- flash第三章阴影小球与阴影文字教案.doc
- Flex操作Wrod文档和Excel文档解决办法.doc
- float型和0比较.doc
- 2字体概况和基本字体书写.ppt
- 2-细胞统一性和多样性.ppt
- 3-4-4生态环境保护.doc
- 3-4岁教育孩子注意问题.doc
- fname=企业简介与资质.doc
- foreach迭代标签varStatus属性使用.doc
- form表单提交数据编码方式和tomcat接受数据解码方式思考.doc
- 2024年山东省公务员录用考试《行测》答案+解析.pdf
- 2024年青海省公务员录用考试《行测》答案+解析.pdf
- 2024年湖北申论真题(县乡卷)及参考答案.pdf
- 2023年山东省公考《申论》真题(B类)及参考答案.pdf
- 2024年重庆市公务员录用考试《行测》答案+解析.pdf
- 2024年云南公务员录用考试《行测》题(网友回忆版).pdf
- 2024年吉林省公务员录用考试《行测》答案+解析.pdf
- 2024年国家公务员录用考试《行测》题(行政执法卷).pdf
- 2024年上海市公考《申论》(B卷)题及参考答案_20241205_110305.pdf
- 2023年吉林省公务员录用考试《行测》题....pdf
最近下载
- JTS 133-2013水运工程岩土勘察规范.docx VIP
- 工程设计方案科学合理(3篇).docx
- 电子元器件选型要求规范实用经典要点.docx
- 慢性病综合防控示范区建设培训PPT课件.ppt
- 医疗器械独立软件(符合ISO 13485、MDR、FDA 21 CFR Part 820)软件配置控制程序2025年.docx
- sg500mx sg630mx sgxxhv光伏并网逆变器通信协议.pdf
- 湖北省荆门市2022年中考[生物]考试真题与答案解析.pdf VIP
- 国际贸易公司办公室主任职责.docx VIP
- 2025年高考数学模拟试卷01(九省新高考新结构卷)及答案.docx VIP
- 码垛机机械手的整体设计论文大学毕设论文.doc
文档评论(0)