《压缩程序(哈弗曼编码算法)》-精选课件(公开).pptVIP

《压缩程序(哈弗曼编码算法)》-精选课件(公开).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
压缩程序(哈弗曼编码算法);需求分析;概要分析;采用顺序表实现对Huffman编码的存储 //---------------Huffman编码存储结构------------------ typedef struct { char ch; int start; char bits[n+1]; }HuffmanCode; typedef HuffmanCode HCode[n]; ch存放对应的字符,start存放Huffman编码在字符数组bits[]中开始的位置。 ;抽象数据;FilePrint(HTree T,HCode H,int N) 初始条件:求得Huffman编码以及 各节点的权值。 操作结果:将求得的数据分别存放在HuffmanCode.txt、Char.txt、Weight.txt中。 FileWrite(HCode H,int N,char filename[]) 初始条件:求得Huffman编码以及 各节点的权值。 操作结果:将文档翻译成Huffman编码以字符形式存放在File.txt中。 FileConvert(void) 初始条件:File.txt存在。 操作结果:将字符形式的Huffman编码翻译成二进制形式,每首季8比特就通过位操作合并成一个字节写入文件code.txt中,最后不足8 位时将最后的几位存放在Tail.txt中。 FileRead(HTree T,HCode H) 初始条件:压缩生成的HuffmanCode.txt、Char.txt、Weight.txt存在。 操作结果:读取字符及其权值和其Huffman编码。;FileExtract(void) 初始条件:压缩结果文件Code.txt和tail.txt存在。 操作结果: 将code.txt和tail.txt中的字符写成编码的二进制字符形式,写进file00.txt。 FileTrans(HTree T,HCode H,int N) 初始条件: 已生成File00,txt并已求得各个字符的Huffman编码,Huffman树已建立。 操作结果:将Huffman编码翻译成原文件,写入translated.txt。 }ADT 还需要包含调用若干库文件:stdio.h, malloc.h, string.h。 ;主函数 ;采用C语言的编程方法在VC++6.0环境下实现本题目的要求。 主程序流程图 ;压缩部分;; 由于文档限于英文文章,所以字符的ASC II码限于0~150。依次读取文档的各个字符,计算每个字符出现的次数为权值,再将数组压缩:没有出现的字符从数组中删去。返回文档出现不同字符的个数 算法如下: 1、统计字符出现的频率,即权值的函数int apprate(char *s,int cnt[],char str[]); 方法具体实现如下: 定义两个数组,分别存放大写和小写英文字母。 a. 将两个数组初始化都为0. b. 如果取出的字符是小写字母,则将小写字母转换为数字,每一个字符对应一个数字,同一个字符出现一次频率就加1???直到全部统计出为止,如果取出的是大写字母,方法如小写字母的实现方法。 c. 再将转换都的数字再转换为相应的字符,以便为下面的建树方便调用。 具体代码如下: 。;int FileRead(int count[],char s[],char filename[]) { int i=0,N=0,k=0,temp[n]; char c; FILE *rf; rf=fopen(filename,r); if (rf==NULL) { printf(cannot open file\n); exit(0); } for (i=0;in;i++) { temp[i]=0; count[i]=0; } while (!feof(rf)) { c=fgetc(rf); k=c; temp[k]++; i++; } fclose(rf); for (i=0;in;i++) { if (temp[i]!=0) { s[N]=i; count[N]=temp[i];

文档评论(0)

小米兰 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档