1. 程式人生 > >GZIP壓縮原理分析(29)——第五章 Deflate演算法詳解(五20) 動態哈夫曼編碼分析(09)構建哈夫曼樹(01)

GZIP壓縮原理分析(29)——第五章 Deflate演算法詳解(五20) 動態哈夫曼編碼分析(09)構建哈夫曼樹(01)

現在已經完成了對字串“As mentioned above,there are many kinds of wireless systems other than cellular.”進行壓縮的第一步,LZ77演算法通過用長度距離對兒替換匹配串的方式將這句話在“位元組”層面上壓縮,壓縮結果為

“As mentioned above,there a(3,4)many kinds of wireless system(3,20)(4,42) thancellular.”。

此時這個字串中能夠被替換的地方都已經被替換了,從現在開始的壓縮,要在“位元”的層面上進行,即把上面的字串從位元組流轉換成位元流,從而實現進一步的壓縮。

注意觀察上面LZ77之後的字串,我們可以將這個字串中的字元分為三類:literal、length、distance。將位元組流轉換成位元流的過程說白了就是用哈夫曼編碼把這些字元轉換成碼字長度不同的二進位制碼字,其中,distance的轉換可以通過構建distance樹來完成,literal和length的轉換可以通過構建literal/length(literal和length用同一棵哈夫曼樹)樹來完成。