2014-09-05 83 views
0

我目前正試圖瞭解DEFLATE算法是如何工作的。我知道它是LZ77和霍夫曼編碼的組合。我研究了這兩種工作方式,但我目前不知道它們在DEFLATE中如何使用或集成。放氣算法僞碼

是否存在DEFLATE算法的僞代碼?我一直在尋找它,但不幸的是,我所看到的只是解釋,沒有確切的算法/僞代碼。

非常感謝您的幫助。

順便說一句,我已經查這個網站: http://www.zlib.net/feldspar.html http://www.gzip.org/algorithm.txt 我也查了RFC 1951年文檔

例如,我有字符串「DEFLATE膨脹」 那怎樣使用DEFLATE進行壓縮?

回答

1

wikipedia

放氣流由一系列的塊組成。每個塊由一個3位首標之後,該位的含義是:

首先位:最後 - 嵌段 - 串流標記:

1: this is the last block in the stream. 
0: there are more blocks to process after this one. 

的第二和第三位:用於編碼方法此塊類型:

00: a stored/raw/literal section, between 0 and 65,535 bytes in length. 
01: a static Huffman compressed block, using a pre-agreed Huffman tree. 
10: a compressed block complete with the Huffman table supplied. 
11: reserved, don't use. 

00 - > LZ77
01,10 - >霍夫曼

LZ77的情況下,它被重複字符串編碼(距離,長度)。

如果是01霍夫曼,霍夫曼樹是預先約定(將被壓縮和解壓縮硬編碼)。

在huffman 10的情況下,以下是重新創建樹和壓縮數據的信息。

3

「DEFLATE INFLATE」是一個非常短的字符串,因此將使用固定的霍夫曼編碼進行編碼。所述壓縮數據的拆卸給出:

last 
fixed 
literal 'DEFLATE IN 
match 5 8 
end 

這意味着單個固定塊是最後的塊,字面字節「DEFLATE IN」,和一個字符串匹配的八個字節回五個字節,其拷貝「FLATE 」。

固定的霍夫曼編碼對文字字節,匹配長度和距離以及標記塊結束的結束碼進行編碼。文字,長度和結束碼都在一個霍夫曼碼中。如果長度被解碼,那麼後面是距離自己的霍夫曼碼的距離碼。

除了詳細解釋收縮格式的RFC 1951之外,您還可以查看zlib發行版中的puff.c代碼,該代碼旨在通過簡單,完整,和充分評論的充氣機。

您還可以使用產生上述示例的infgen.c來反彙編縮放壓縮的結果(例如,使用gzip)以獲得更多信息。

您需要先閱讀RFC,理解puff.c以及使用infgen.c查看示例,才能瞭解deflate格式。只有這樣你才能開始考慮用壓縮器創建放氣流的方法。

如果您不瞭解RFC 1951,那麼您可能需要先深入研究Huffman代碼和LZ77。