哈弗曼编码压缩任意格式文件.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本程序是本人学习数据结构时自己写的,可以压缩、解压缩任意格式文件。由于本人水平有限,里面会有缺陷,若有兴趣,可以多多指正!!! Email:e9999e@163.com ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////[BEGIN]//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //时间:2012年5月9日10:24:19 //编译器:VC++6.0 //数据组织:参见程序的详细说明 //功能:哈弗曼压缩文件(可以 压缩并解压 任何格式文件),参见程序的详细说明 //历时:2天 /* *************************************************************************** Bug修复 *************************************************************************** 【2012.5.10 18:13:00 修复了:文件中只有一种英文字符无法压缩和解压缩的Bug。解决办法参见本文件中哈夫曼树的创建函数】 【2012.5.10 20:49:00 修复了:不能准确还原文件的Bug,是解压文件与原文件大小等完全相同,另外还可以压缩、解压其他任何类型文件(doc、jpg等)。具体修复办法参见压缩、解压缩】 */ /* *************************************************************************** 程序的详细说明 *************************************************************************** 本程序是适用于所有格式文件。。。。 //-----------------【注意,以下是对于文本文件的思考。因为是二进制操作文件,故适用于所有格式文件】 如何实现压缩文件呢,首先考虑到字符存储问题,英文是一个字节存储的,汉子是两个字节存储的。 都属于定长存储(定长编码),可以利用哈夫曼树对其进行编码,使其转换为变长的前缀编码。 那么,如何实现编码的转换呢 ? 考虑到汉子也可以将其两个字节分别处理,故这里采用单个字节处理的办法, 将每个字节进行编码。 首先读取文件,计算出每个字节出现的次数。次数即权值,对其进行构造哈夫曼树,然后求出编码,将编码存储在一个 二维数组中。再次打开想要压缩的文件,每读入一个字节,就对其进行编码,并写入压缩文件。 由于将编码后的数据写入压缩文件时,需整个字节操作,即编码数据刚好整个字节时(可以是多个字节)写入压缩文件, 故此处利用一个整形变量作为缓冲。 解压缩时,需再次将 与压缩时相同的哈夫曼树 构造出来,以便进行译码。因此压缩时存储了,原文件中各个字节出现的 次数(也就是权值),这样就能再次构造出哈夫曼树。【注意】这里当然也可以将哈夫曼树存储下来,解压时再次重构。 解压时,读取字符出现的次数,重构出哈夫曼树,进行译码。这里也是读取整个字节(可以是多个),按位进行译码。 */ ///////////////////////////////////////////////////////////////////////////////////////// #include iostream #include string #include fstream using namespace std; ///////////////////////////////////////////////////////////////////////////////////////// //HuffmanNode 节点定义 struct HuffmanNode { unsign

文档评论(0)

ipad0c + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档