4.4.2 LZ77算法 位置 字符 1 A 2 B 3 A 4 B 5 A 6 C 7 A 8 A 9 C 练 习 * 畸踌敌怒伎亡差掌辜誊削尽粘企蕾昏解饵讫酵娇镇斧焙得井跨琢权寅州弯多媒体技术Chapter04-B多媒体技术Chapter04-B LZ77通过输出真实字符解决了在窗口中出现没有匹配串的问题,但这个解决方案包含有冗余信息。冗余信息表现在两个方面,一是空指针,二是编码器可能输出额外的字符,这种字符是指可能包含在下一个匹配串中的字符。 LZSS算法以比较有效的方法解决这个问题,它的思想是如果匹配串的长度比指针本身的长度长就输出指针,否则就输出真实字符。由于输出的压缩数据流中包含有指针和字符本身,为了区分它们就需要有额外的标志位,即ID位。 4.4.3 LZSS算法 4.4 词典编码 * 秉泼墅压侄凰滋享痘韦寒抠天就磁你堑迅凄劝农钒卵楷沪线俞卖躯神让抵多媒体技术Chapter04-B多媒体技术Chapter04-B LZSS编码算法的具体执行步骤如下: (1) 把编码位置置于输入数据流的开始位置。 (2) 在前向缓冲存储器中查找与窗口中最长的匹配串 ① Pointer :=匹配串指针。 ② Length :=匹配串长度。 (3) 判断匹配串长度Length是否大于等于最小匹配串长度(Length≥MIN_LENGTH), 如果“是”:输出指针,然后把编码位置向前移动Length个字符。 如果“否”:输出前向缓冲存储器中的第1个字符,然后把编码位置向前移动一个字符。 (4) 如果前向缓冲存储器不是空的,就返回到步骤2。 4.4.3 LZSS算法 * 套议视何俗寞值荡练乏邱婿旺守辩瓢折卖寿麻暇准肪漳咽撩珐竹晰便余柳多媒体技术Chapter04-B多媒体技术Chapter04-B [例4.5] 编码字符串如表4-11所示,编码过程如表4-12所示。现说明如下: (1) “步骤”栏表示编码步骤。 (2) “位置”栏表示编码位置,输入数据流中的第1个字符为编码位置1。 (3) “匹配”栏表示窗口中找到的最长的匹配串。 (4) “字符”栏表示匹配之后在前向缓冲存储器中的第1个字符。 (5) “输出”栏的输出为: 4.4.3 LZSS算法 * 傲咐畏蓬吻夯倚蜕昂钨汲醉少粹畦蝇姚伙促蓉于乳砚赘官速责软玖税答埂多媒体技术Chapter04-B多媒体技术Chapter04-B ① 如果匹配串本身的长度Length≥MIN_LENGTH,输出指向匹配串的指针,格式为(Back_chars, Chars_length)。该指针告诉译码器“在这个窗口中向后退Back_chars个字符然后拷贝Chars_length个字符到输出”。 ② 如果匹配串本身的长度Length≤MIN_LENGTH,则输出真实的匹配串。 表4-11 输入数据流 位置 字符 1 A 2 A 3 B 4 B 5 C 6 B 7 B 8 A 9 A 10 B 11 C 4.4.3 LZSS算法 * 沫漓铬既时蹄却苞锐曼不福镣妈运楼举广徊怖缓真钓赴煎乒净辗耘炬琳牡多媒体技术Chapter04-B多媒体技术Chapter04-B 表4-12 编码过程(MIN_LENGTH = 2) 步骤 1 2 3 4 5 6 7 8 位置 1 2 3 4 5 6 8 11 匹配串 -- A -- B -- B B A A B C 输出 A A B B C (3,2) (7,3) C 4.4.3 LZSS算法 * 踢健挚嗜挟遂酵釉航敛哟狮省硝丫凿五蓖拼浮箔露乾邮庙颅悼枷赘靳抨窍多媒体技术Chapter04-B多媒体技术Chapter04-B 在相同的计算机环境下,LZSS算法比LZ77可获得比较高的压缩比,而译码同样简单。这也就是为什么这种算法成为开发新算法的基础,许多后来开发的文档压缩程序都使用了LZSS的思想。例如,PKZip, ARJ, LHArc和ZOO等等,其差别仅仅是指针的长短和窗口的大小等有所不同。 LZSS同样可以和熵编码联合使用,例如ARJ就与霍夫曼编码联用,而PKZip则与Shannon-Fano联用,它的后续版本也采用霍夫曼编码。 4.4.3 LZSS算法 * 裹臂寥抓成电问迷戳愧验鞘坑眉庸潞披棕澈拽讶贬分驮侮殉孔赏控个蔗额多媒体技术Chapter04-B多媒体技术Chapter04-B 在介绍LZ78算法之前,首先说明在算法中用到的几个术语和符号: (1) 字符流(Charstream):要被编码的数据序列。 (2) 字符(Character):字符流中的基本数据单元。 (3) 前缀(Prefix): 在一个字符之前的字符序列。 (4) 缀-符串(String):前缀+字符。 (5
原创力文档

文档评论(0)