Huffman压缩原理.docVIP

  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 压缩原理 科学家在研究中发现,大多数信息的表达都存在着一定的冗余度,通过采用一定的模型和编码方法,可以降低这种冗余度。 贝尔实验室的 Claude Shannon 和 MIT 的 R.M.Fano 几乎同时提出了最早的对符号进行有效编码从而实现数据压缩的 Shannon-Fano 编码方法。 D.A.Huffman 于 1952 年第一次发表了他的论文“最小冗余度代码的构造方法”(A Method for the Construction of Minimum Redundancy Codes)。从此,数据压缩开始在商业程序中实现并被应用在许多技术领域。 到 1977 年,数据压缩的研究工作主要集中于熵、字符和单词频率以及统计模型等方面,研究者们一直在绞尽脑汁为使用 Huffman 编码的程序找出更快、更好的改进方法。 1977 年,以色列人 Jacob Ziv 和 Abraham Lempel 发表了论文“顺序数据压缩的一个通用算法”(A Universal Alogrithem for Sequential Data Compression)。 1978 年,他们发表了该论文的续篇“通过可变比率编码的独立序列的压缩”(Compression of Individual Sequences via Variable-Rate Coding)。 所有的一切都改变了,在这两篇论文中提出的两个压缩技术被称为 LZ77 和 LZ78 (不知为什么,作者名字的首字母被倒置了)。简单地说,这两种压缩方法的思路完全不同于从 Shannon 到 Huffman 到算术压缩的传统思路。因此,人们将基于这一思路的编码方法称作“字典”式编码。字典式编码不但在压缩效果上大大超过了 Huffman,而且,对于好的实现,其压缩和解压缩的速度也异常惊人。 80 年代中期以后,人们对 LZ77 进行了改进,随之诞生了一批我们今天还在大量使用的压缩程序。Haruyasu Yoshizaki(Yoshi) 的 LHarc 和 Robert Jung 的 ARJ 是其中两个著名的例子。LZ77 得以和 LZ78、LZW 一起垄断当今的通用数据压缩领域。 目前,基于字典方式的压缩已经有了一个被广泛认可的标准,从古老的 PKZip 到现在的 WinZip,特别是随着 Internet 上文件传输的流行,ZIP 格式成为了事实上的标准,没有哪一种通用的文件压缩、归档系统敢于不支持 ZIP 格式。 ?ht首先被提出来,是为了解决这样的问题: ????对于N种数据(比如5种数据:A、B、C、D、E),在出现的频率已 知的情况下(比如分别出现了3、5、2、6、4次),如何用不等长的01 串来分别表示它们,使01串的总长度最短。 ????比如原始串:ABADBCBDABEDBDEDCEDE ????对于这个问题,首先得到:任何一个01串都不能是其他01串的前缀 。也就是说,如果用“10”来表示A,那么其他01串就不能以“10”开 头。 ????建立01串的步骤如下: ????首先找到出现最少的两个数据(A、C),分别以它们为左右子树, 建立一个二叉树。并将它们出现次数之和作为根节点: 1) ????5???5B??6D??4E ???/?\ ??3A?2C ????然后从剩下的4个数举重找到两个最小的,做同上的操作,知道只 剩一个数据为止: 2) ????5?????9????6D ???/?\???/?\ ??3A?2C?5B?4E ?? 3) ??????11??????9 ?????/??\????/?\ ????5???6D??5B?4E ???/?\ ??3A?2C ?? 4) ???????????20 ??????????/??\ ???????11??????9 ??????/??\????/?\ ?????5???6D??5B?4E ????/?\ ???3A?2C ????最后从根节点开始,每个左子树填0,右子树填1: ?????????????ROOT ????????????/????\ ???????????0??????1 ??????????/?\????/?\ ?????????0??1D??0B?1E ????????/?\ ???????0A?1C ????这样每个数据对应的01串就是从根节点到数据所在的叶子节点的路 径: A:?000 B:?10 C:?001 D:?01 E:?11 ????这样原始串ABADBCBDABEDBDEDCEDE就成了: 000100000110001100100010110110011101001110111 压缩: ????把256个Asci

文档评论(0)

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

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

1亿VIP精品文档

相关文档