算术编码-四川大学.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LZ77算法 A A B C B B A B C A 步骤 位置 匹配串 输出 1 1 -- 0, 0, A 2 2 A 1, 1, B 3 4 -- 0, 0, C 4 5 B 2, 1, B 5 7 ABC 5, 3, A LZSS算法 LZ77通过输出真实字符解决了在窗口中出现没有匹配串的问题,但这个解决方案包含有冗余信息。冗余信息表现在两个方面,一是空指针,二是编码器可能输出额外的字符,这种字符是指可能包含在下一个匹配串中的字符。 LZSS算法的思想是如果匹配串的长度比指针本身的长度长就输出指针(匹配串长度大于等于MIN_LENGTH),否则就输出真实字符。另外要输出额外的标志位区分是指针还是字符 LZSS算法 1、从当前压缩位置开始,考察未编码的字符,并试图在滑动窗口中找出最长的匹配字符串,如果匹配串长度len大于等于最小匹配串长度(len = MIN_LENGTH),则进行步骤 2,否则进行步骤 3。 2、输出指针二元组 ( off, len)。其中 off 为窗口中匹配字符串相对窗口边界的偏移,len 为匹配串的长度,然后将窗口向后滑动 len 个字符,继续步骤 1。 3、输出当前字符c,然后将窗口向后滑动 1 个字符,继续步骤 1。 LZSS算法 位置 1 2 3 4 5 6 7 8 9 10 11 字符 A A B B C B B A A B C 步骤 位置 匹配串 输出 1 1 -- A 2 2 A A 3 3 -- B 4 4 B B 5 5 -- C 6 6 BB (3,2) 7 8 AAB (7,3) 8 11 C C 输入数据流: 编码过程 MIN_LEN =2 LZSS算法 在相同的计算机环境下,LZSS算法比LZ77可获得比较高的压缩比,而译码同样简单。这也就是为什么这种算法成为开发新算法的基础,许多后来开发的文档压缩程序都使用了LZSS的思想。例如,PKZip, GZip, ARJ, LHArc和ZOO等等,其差别仅仅是指针的长短和窗口的大小等有所不同。 LZSS同样可以和熵编码联合使用,例如ARJ就与霍夫曼编码联用,而PKZip则与Shannon-Fano联用,它的后续版本也采用霍夫曼编码。 第二类词典编码 第二类算法的想法是企图从输入的数据中创建一个“短语词典 (dictionary of the phrases)”,这种短语可以是任意字符的组合。编码数据过程中当遇到已经在词典中出现的“短语”时,编码器就输出这个词典中的短语的“索引号”,而不是短语本身。 LZ78算法 LZ78的编码思想是不断地从字符流中提取新的字符串(String),通俗地理解为新“词条”,然后用“代号”也就是码字(Code word)表示这个“词条”。这样一来,对字符流的编码就变成了用码字(Code word)去替换字符流(Char stream),生成码字流(Code stream),从而达到压缩数据的目的。 LZ78编码器的输出是码字-字符(W,C)对,每次输出一对到码字流中,与码字W相对应的字符串(String)用字符C进行扩展生成新的字符串(String),然后添加到词典中。 LZ78算法 步骤1:将词典和当前前缀P都初始化为空。 步骤2:当前字符C:=字符流中的下一个字符。 步骤3:判断P+C是否在词典中 (1)如果“是”,则用C扩展P,即让P:=P+C,返回到步骤2。 (2)如果“否”,则 输出与当前前缀P相对应的码字W和当前字符C, 即(W,C); 将P+C添加到词典中; 令P:=空值,并返回到步骤2 LZ78算法 位置 1 2 3 4 5 6 7 8 9 字符 A B B C B C A B A 步骤 位置 词典 输出 1 1 A (0, A) 2 2 B (0, B) 3 3 BC (2, C) 4 5 BCA (3, A) 5 8 BA (2, A) 输入数据流: 编码过程: LZW算法 J.Ziv和A.Lempel在1978年首次发表了介绍第二类词典编码算法的文章。在他们的研究基础上,Terry A.Welch在1984年发表了改进这种编码算法的文章,因此把这种编码方法称为LZW(Lempel-Ziv Walch)压缩编码。 在编码原理上,LZW与LZ78相比有如下差别: LZW只输出代表词典中的字符串(String)的码字(code word)。这就意味在开始时词典不能是空的,它必须包含可能在字符流出现中的所有单个字符。即在编码匹配时,至少可以在词典中找到长度为1的匹配串。 LZW编码是围绕称为词典的转换表来完成的。 LZW算法 LZW编

文档评论(0)

yuxiufeng + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档