- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于静态哈夫曼编码的文件压缩
指导老师:石慧
作者:韦邦灯
E-Mail :syshunter@
班级:07 计升 2 班
学号:078123030201
数据结构课程设计
一、问题描述
本次所选为课题 8:采用哈夫曼编码思想实现文件的压缩和恢复功能。并提供压缩前后
的占用空间之比。要求:描述压缩基本符号的选择方法;运行时的压缩原文件的规模应不小
于 5k;提供恢复文件与原文件的相同性对比功能。
二、模型描述
由于题目已经明确给出采用哈夫曼树模型,故我们只需考虑相关的存储结构与文件操作
等。
三、算法设计
本次课程设计所采用的开发平台是 winxp+vc60+msdn60,为方便将设计重点放在算法核
心上,GUI采用MFC库,方便开发.为了能达到对任意文件进行压缩解压缩的目的,文
件读写采用二进制形式。由于该课题涉及到压缩与解压缩两部分,下面分别讨论。
压缩部分:
为了能将指定文件通过哈夫曼编码形式压缩。首先必须构造哈夫曼树。为确定文件中字
符的权值,我采用的方法是使用该字符出现的次数作为权值。因为每个字符占 8 位,故最大
可表示范围为 0xff 。生成的哈夫曼树最大长度为 256*2-1 ;在构建好哈夫曼树后,生成字符
与哈夫曼编码的对照链表(Clist )。接下来需要再次读取文件,每次读 8bit (一个字节)。通
过查询前面创建的 Clist,将该编码写入新的文件(即压缩文件)。下面讨论每步的实现;
1:扫描文件统计字符出现次数,存入Clist 链表
typedef struct node {
unsigned char ch; //字符
WEIGHT_TYPE weight; //权值(用出现次数表示)
char *code; //对应的HUFFMAN编码
struct node *next;
} CNode,*Clist;
2 :将Clist 链表中的 weight 依次赋予权值数组 w[] 。然后创建对应的哈夫曼树。哈夫曼树节
点定义如下:
typedef struct huff {
union { //利用union节省树长度个字节
unsigned char ch;
unsigned int lchild;
};
WEIGHT_TYPE weight;
unsigned int parent,rchild;
}HTNode,*HuffmanTree;
3 :首先将生成哈夫曼树的长度写入文件,再将生成的哈夫曼树写入压缩文件。因为我采用
的是每 8bit 一编码,所以该哈夫曼树的长度最大是 256*2-1 。我写入的是一个4 字节整型
4 :再次读取文件,每次读取 4096 字节存入缓冲,通过 Clist 得到缓冲中每个字符对应的哈
夫曼编码,写入压缩文件。这里的问题是,由于编码是变长的,且文件操作最小单位是 8bit。
所以必须将不足 8bit 的编码补后面的字符编码,超过 8bit 的必须截断为 8bit,剩余bit 与后
面的编码合并。我采用的方法是:
(1)设置缓冲字符cache,初始=0 ;移位计数变量bi=1
(2 )从读缓冲取一个字符查表得到哈夫曼编码存入code,计算该 code 长度作为循环条件
(3 )从code 高位取一位编码 存入临时 c ;
(4 )cache=cache*2 ;
(5 )cache=cache+c;
(6 )如果bi==8 ,则将 cache 写入压缩文件,重设 cache=0,bi=1 ;否则bi++ ;
(7 )转去(3 ),直到code 的所有位均已取完。
(8 )转去(1),直到缓冲中所有字符已经取完。
5 :关于文件尾部未对准字节的处理。在步骤 4 将编码写入压缩文件时,当遇到一个字节的
编码不足 8bit 时。为了能在解
您可能关注的文档
- 第二章 AB RSLOGIX5000安装教程.pdf
- 家居室内设计流程及案例-教材.doc
- 电脑配置知识_附件.docx
- 第二章 面试有话可说之名言警句.doc
- Linux中LVM磁盘更换操作不当导致的错误和修复过程记录.docx
- 各种视频传输模式比较分析的知识.doc
- 计算机BIOS进入后英文设置说明剖析.doc
- 第七章 最好pdf阅读器排行.doc
- 笔记本电脑日常保养教案.docx
- 第三章 2016继续教育文献检索篇(90分以上).docx
- 2024年电工考前冲刺测试卷附参考答案详解【综合题】.docx
- 2024年电工考前冲刺测试卷附参考答案详解【完整版】.docx
- 2024年电工考前冲刺测试卷带答案详解(预热题).docx
- 2024年电工考前冲刺练习试题【满分必刷】附答案详解.docx
- 2024年电工考前冲刺测试卷附完整答案详解(必刷).docx
- 2024年电工考前冲刺练习及参考答案详解一套.docx
- 2024年电工考前冲刺练习及参考答案详解【基础题】.docx
- 2024年电工考前冲刺测试卷含答案详解【巩固】.docx
- 2024年电工考前冲刺测试卷附答案详解(培优A卷).docx
- 2024年电工考前冲刺测试卷含答案详解(培优A卷).docx
最近下载
- 和利时LK大型PLC指令手册.pdf VIP
- 浅析莫扎特《C大调小奏鸣曲k.545》的音乐风格与演奏技巧.docx
- 2022年人教版九年级全一册物理同步教学教案.doc VIP
- 湘质监统编2020表格机器转换word版(房屋建筑工程竣工验收技术资料统一用表).docx
- 海关通关业务介绍幻灯片.ppt VIP
- 湘质监统编2020表格机器转换word版(市政基础设施工程竣工验收技术资料统一用表).docx VIP
- Roland罗兰乐器TD-11 电鼓音源TD-15 TD-11 用户手册用户手册.pdf
- 垃圾焚烧发电行业自动监控数据应用综合题库.docx VIP
- 《海关特殊监管区域通关制度》课件.ppt VIP
- 3年级劳动教案《我是厨房小帮手》.pdf VIP
文档评论(0)