LZ77演算法原理及實現__演算法

來源:互聯網
上載者:User
1. 引言

LZ77演算法是採用字典做資料壓縮的演算法,由以色列的兩位大神Abraham Lempel與Jacob Ziv在1977年發表的論文《A Universal Algorithm for Sequential Data Compression》中提出。

基於統計的資料壓縮編碼,比如Huffman編碼,需要得到先驗知識——信源的字元頻率,然後進行壓縮。但是在大多數情況下,這種先驗知識是很難預先獲得。因此,設計一種更為通用的資料壓縮編碼顯得尤為重要。LZ77資料壓縮演算法應運而生,其核心思想:利用資料的重複結構資訊來進行資料壓縮。舉個簡單的例子,比如

取之以仁義,守之以仁義者,周也。取之以詐力,守之以詐力者,秦也。

取之以、仁義、,、者、守之以、也、詐力、。均重複出現過,只需指出其之前出現的位置,便可表示這些詞。為了指明出現位置,我們定義一個相對位置,如圖

相對位置之後的訊息串為取之以詐力,守之以詐力者,秦也。,若能匹配相對位置之前的訊息串,則編碼為以其匹配的訊息串的起始與末端index;若未能匹配上,則以原字元編碼。相對位置之後的訊息串可編碼為:[(1-3),(詐力),(6),(7-9),(詐力),(12),(6),(秦),(15-16)],如圖所示:

上面的例子展示如何利用索引值來表示詞,以達到資料壓縮的目的。LZ77演算法的核心思想亦是如此,其具體的壓縮過程不過比上述例子稍顯複雜而已。 2. 原理

本文講主要討論LZ77演算法如何做壓縮及解壓縮,關於LZ77演算法的唯一可譯、無損壓縮(即解壓可以不丟失地還原資訊)的性質,其數學證明參看原論文[1]。 滑動視窗

至於如何描述重複結構資訊,LZ77演算法給出了更為確切的數學解釋。首先,定義字串 S S的長度為 l(s) l(s),其中 S(1,j), 1≤j≤l(s) S(1,j), 1≤j≤l(s)為 S S的首碼。對於 S(1,j) S(1,j)且 i≤j i≤j, L(i) L(i)為滿足下列條件的 l l( l≤l(S)−j l≤l(S)−j)的最大值:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.