以前學習了一下gif的lzw演算法,不過只是學習了一下(見我以前的那篇博文《lzw for gif演算法原理和實現》),沒有實踐,也沒有看看效果到底怎麼樣,因為現在zip庫很多,基本上不需要自己寫壓縮演算法了,lzw的壓縮效果也比不上它們。不過最近有個嵌入式系統上的資料記錄需求,希望把執行過程中採集的資料都記錄下來,但是儲存空間比較有限,處理器的能力也比較有限,是266兆的ppc,所以不能使用複雜的演算法了,於是又想起lzw演算法來,首先是採集的資料具有短時間內大量重複的特點,可以用簡單的演算法就達到很好的效果,其次這個演算法處理得好的話很省資源,至於壓縮比則是其次的考慮。
為了驗證一下演算法的正確性和效果,先用python實現了一下演算法。由於只是驗證演算法,所以不考慮效率,只追求程式設計簡單。用python實現起來還真是方便,如果不進行位緊縮的話,二十多行**就搞定了,拿幾個檔案試了下壓縮和解壓,乙個140多k的cpp程式,可以壓到33k多,用乙個1兆多的軟盤映像檔案,可以壓到一半左右,拿txt的《三國演義》,則只有70%了(不過rar也只能壓到50%多)。全部檔案解壓出來和原檔案二進位制比較完全一致,證明了演算法的正確性。
實踐表明選用的最大位寬越大壓縮率越高,但是記憶體開銷和時間開銷都最大,而且由於最大位寬比較大,進行位緊縮後效果不明顯,而14位的最大位寬綜合效果最理想。如果是在嵌入式環境下使用的話,使用小一點的最大位寬開銷要小一些,不過不要小於12位。
有了這個python版本,接下來準備用c語言再實現一遍的時候就有參考了。
壓縮演算法 lzw演算法實現
壓縮演算法 lzw演算法實現 字典壓縮的基本原理 以色列人lempel與ziv發現在正文流中詞彙和短語很可能會重複出現。當出現乙個重複時,重複的序列可以用乙個短的編碼來代替。壓縮程式重複掃瞄這樣的重複,同時生成編碼來代替重複序列。隨著時間過去,編碼可以用來捕獲新的序列。演算法必須設計成壓縮程式能夠在...
lzw壓縮演算法 VBScript中的LZW壓縮演算法
lzw壓縮演算法 介紹本文向您展示如何在vbscript中實現lzw無失真壓縮演算法。它也可以按原樣或幾乎按原樣在vba中使用。lzw演算法lzw演算法是一種壓縮技術,不會導致資料丟失。它構建了動態壓縮中使用的 和值的字典。該詞典不與壓縮檔案一起儲存,並且在壓縮後將被丟棄。在解壓縮期間,將從壓縮的資...
LZW編譯碼演算法實現與分析
題目 lzw編譯碼原理和實現演算法 part1.lzw編碼原理和實現演算法 lzw的編碼思想是不斷地從字元流中提取新的字串,通俗地理解為新 詞條 然後用 代號 也就是碼字表示這個 詞條 這樣一來,對字元流的編碼就變成了用碼字去替換字元流,生成碼字流,從而達到壓縮資料的目的。lzw編碼是圍繞稱為詞典的...