- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
自适应Huffman压缩码的生成_计算机论文
自适应Huffman压缩码的生成_计算机论文
摘要:随着现代社会信息量的增加,对数据进行压缩越来越有它的必要性。其中,Huffman编码作为一种高效的数据编码方法在文本、图象、音频等压缩有着广泛的应用。本文中,笔者根据Huffman编码的原理,实现对文本进行压缩与解压的功能。
关键词:Huffman编码;数据压缩;解压;文本;自适应编码
Huffman编码压缩是一种无损压缩技术。利用Huffman编码原理进行压缩的主要问题包括压缩的算法设计及程序实现、解压算法及程序实现。
一、Huffman编码介绍
Huffman于1952年提出一种编码的方法,它完全依据字符出现概率来构造平均长度最短的编码,有时称之为最佳编码,一般叫做Huffman编码。它的基本原理是频繁使用的数据用较短的代码代替,较少使用的数据用较长的代码代替,每个数据的代码各不相同。这些代码都是二进制码,且码的长度是可变的。
二、自适应Huffman编码原理
基于静态Huffman编码算法对输入的符号流进行编码,必须进行两次扫描,第一次扫描统计字符出现的概率,并创建Huffman树;第二次扫描是按照Huffman树的字符进行编码。并且在存储和传输Huffman编码时,必须先存储和传送Huffman树。这些问题使的静态Huffman编码在实际应用用的的较少。为了解决静态Huffman编码的缺点,产生了自适应Huffman编码,它只需要对输入的符号流进行一次扫描即可。它不仅涉及到编码树的构造过程,还与编码和解码有关。
自适应Huffman编码过程
初始化Huffman树
对每个输入符号
{对符号编码;
更新Huffman树;
}
初始化Huffman树时,由于对字符流进行一次扫描,因此,不能预先知道各字符的概率,为了对所以字符一致对待,在这里使用符号为NYT,权值为0作为初始的Huffman树。NYT不同于任何一个将要传送的符号,在这里作为一个逸出码。NYT有两种作用:一是在编码时,当有一个还没在编码树出现的字符需要编码时,系统就输出NYT编码,然后跟着字符的原始表达;在解码时,当解码器读出NYT时,就知道下面的内容暂不是Huffman编码,而是一个从没在编码数据流出现的原始字符;二是作为新字符的插入点,在需要插入一个新字符时,总是构造一个新子树,子树包括NYT符号和新符号两个叶结点,然后将旧的NYT结点用新子树代替,并使原NYT和新符号结点的权值赋一。对符号编码与静态的一样。在每次编码完成之后,需要试图对包含的结点进行权值加一操作,为此在这里需要介绍两个概念:结点编号和所属块。结点编号是一个全局唯一的的值,不同的结点有不同的结点编号,它具有如下特性:
(一)权值越大的结点,结点编号越大。
(二)父结点的编号总是大于子结点的编号。
以上两点称为兄弟属性,在每次调整结点权值时,都需要调整结点的编号,以避免兄弟属性破坏。在本课程设计中用数组来表示结点编号,根结点在数组的最大位置。所属块指权值相同的一组结点。在对每个结点进行权值加一时,首先检查该结点是否是所在块的最大结点,如果不是,将该结点与所在块的最大结点交换位置,在对该结点的权值加一,这样保证了结点的兄弟属性,由于结点的权值发生变化,必须递归对结点的夫结点执行加一操作。
三、自适应Huffman压缩编码算法
(一)判断字符在文本中是否出现
由于自适应Huffman编码只对字符流扫描一次,因此,就需要判断该字符在前面的字符流是否出现过。
(二)判断该字符是否是所属块的最大结点
为了保证其兄弟属性不破坏,在进行加一操作时,必须判断该结点是否是所属快的最大结点,不是就必须交换当前结点与最大结点。
(三)交换当前结点与所属块的最大结点
当HighInBlock函数返回的不是-1就必须交换当前结点与所属块的最大结点,保证兄弟属性。
(四)对当前字符进行编码
从输入流中得到一个字符,若以前出现过该字符,则对该字符进行编码,并判断该字符是否是所属块的最大结点,否就交换当前结点与最大结点;若以前没有出现该字符,则生成两个结点,一个结点用于保存该字符,另一个用做逸出码结点NYT,并这两个结点的父结点为原逸出码结点NYT,输出逸出码及原字符。在这里我们用了code这个结构来保存一个字符的编码。
程序流程过程如下:
1、从字符输入流中,取出一个字符;
2、判断该字符以前是否出现过?
3、否,用新的NYT及字符结点代替原NYT,输出逸出码及原字符,并使原NYT及字符结点的权值赋
您可能关注的文档
- 网络安全的研究 _计算机论文.doc
- 网络安全策略_计算机网络论文.doc
- 网络安全策略研究_计算机网络论文.doc
- 网络常见故障的分类诊断_计算机论文.doc
- 网络平安和网络道德的思索_计算机论文.doc
- 网络平安的探究 _计算机论文.doc
- 网络广告受众行为研究_计算机网络论文.doc
- 网络广告策略研究_计算机网络论文.doc
- 网络应用服务审计系统的探析_计算机网络论文.doc
- 网络引起语言变异的原因、规律以及方式的分析报告_计算机网络论文.doc
- 2025年网络文学平台版权运营模式创新与版权保护体系构建.docx
- 数字藏品市场运营策略洞察:2025年市场风险与应对策略分析.docx
- 全球新能源汽车产业政策法规与市场前景白皮书.docx
- 工业互联网平台安全标准制定:安全防护与合规性监管策略.docx
- 剧本杀剧本创作审核标准2025年优化与行业自律.docx
- 2025年新能源电动巡逻车在城市安防中的应用对城市环境的影响分析.docx
- 全渠道零售案例精选:2025年行业创新实践报告.docx
- 2025年网约车司乘纠纷处理机制优化与行业可持续发展报告.docx
- 2025年宠物烘焙食品市场法规政策解读:合规经营与风险规避.docx
- 2025年宠物行业数据安全监管政策影响分析报告.docx
文档评论(0)