LZ77壓縮算法


  gzip軟件核心算法deflate,是LZ77和Huffman壓縮的結合。后者,一般教材都有介紹,本文對LZ77做個簡要概述。

  1977年,Jacob Ziv和Abraham Lempel描述了一種基於滑動窗口緩存的技術,該緩存用於保存最近剛剛處理的文本(J. Ziv and A. Lempel, “A Universal Algorithm for Sequential Data Compression”, IEEE Transaction on Information Theory, May 1977)。這個算法一般稱為IZ77。

  LZ77和它的變體發現,在正文流中詞匯和短語(GIF中的圖像模式)很可能會出現重復。當出現一個重復時,重復的序列可以用一個短的編碼來代替。壓縮程序掃描這樣的重復,同時生成編碼來代替重復序列。隨着時間的過去,編碼可以重用來捕獲新的序列。算法必須設計成解壓程序能夠在編碼和原始數據序列推導出當前的映射。

  在研究LZ77的細節之前,先看一個簡單的例子(J. Weiss and D. Schremp, “Putting Data on a Diet”, IEEE Spectrum, August 1993)。考慮這樣一句話: the brown fox jumped over the brown foxy jumping frog

  這個短語的長度總共是53個八位組 = 424 bit。算法從左向右處理這個文本。初始時,每個字符被映射成9 bit的編碼,二進制的1跟着該字符的8 bit ASCII碼。在處理進行時,算法查找重復的序列。當碰到一個重復時,算法繼續掃描直到該重復序列終止。換句話說,每次出現一個重復時,算法包括盡可能多的字符。碰到的第一個這樣的序列是the brown fox。這個序列被替換成指向前一個序列的指針和序列的長度。在這種情況下,前一個序列的the brown fox出現在26個字符之前,序列的長度是13個字符。對於這個例子,假定存在兩種編碼選項:8 bit的指針和4 bit的長度,或者12 bit的指針和6 bit的長度。使用2 bit的首部來指示選擇了哪種選項,00表示第一種選項,01表示第二種選項。因此,the brown fox的第二次出現被編碼為 <00b><26d><13 d >,或者00 00011010 1101。

  壓縮報文的剩余部分是字母y;序列<00b><27d><5 d >替換了由一個空格跟着jump組成的序列,以及字符序列ing frog。

  下圖演示了壓縮映射的過程。壓縮過的報文由359 bit字符和兩個編碼組成,總長度為35 x 9 + 2 x 14 = 343比特。和原來未壓縮的長度為424比特的報文相比,壓縮比為1.24

  本文選自:http://jpkc.zust.edu.cn/2007/dmt/course/MMT03_05_2.htm

  拓展閱讀:壓縮算法綜述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM