LZ77壓縮演算法

來源:互聯網
上載者:User

  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。

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

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

  拓展閱讀:壓縮演算法綜述

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.