lz77優化 譯 十款效能最佳的壓縮演算法

2021-10-16 23:34:13 字數 2279 閱讀 4077

資料壓縮是保留相同或絕大部分資料前提下減小檔案大小的過程。 它的原理是消除不必要的資料或以更高效的格式重新組織資料。在進行資料壓縮時,你可以選擇使用有損方法或無損方法。有損方法會永久性地擦除掉一些資料,而無損方法則能保證持有全部的資料。使用哪類方法取決於你要讓你的檔案保持多大的精準度。

6款無損資料壓縮演算法

無失真壓縮演算法通常被用於歸檔或其他高保真目的。這些演算法能夠讓你在確保檔案可被完整恢復的同時減少檔案大小。有很多種無失真壓縮演算法供你選擇。下面介紹6種常用的演算法:

1. lz77

lz77演算法發布於2023年。作為很多其他無失真壓縮演算法的基礎,它使用了「滑動視窗」的概念。在這個概念中,lz77管理了乙個字典。該字典使用三元組的方式:

偏移量(offset):短語起始處於檔案開頭之間的距離

行程長度(run length):組成短語的字元數

偏離字元:表明新短語的標記符,匹配結束後,前向緩衝區中的第乙個符號

當檔案被解析時,字典會被實時更新以反映最新的壓縮資料和大小。舉個例子,如果乙個檔案包含字串"abbadabba",那麼被壓縮到字典中的項就是"abb(0,1,'d')(0,3,'a')"。你可以看下下表的拆解過程:

這個例子中,被壓縮後的資料並不比初始資料小多少。但一般情況下,當檔案很長時,這種壓縮效果就會顯現出來。

2. lzr

lzr由michael rodeh於2023年提出,它是在lz77的基礎上發展而來。這個演算法目標是成為lz77的乙個線性時間替換演算法,但編碼後udell指標可能指向檔案的任意偏移量,意味著需要耗費可觀的記憶體,因此表現不如lz77。

3. lzss

lzss,全稱lempel-ziv-storer-szymanski,於2023年提出。它也是旨在提公升lz77的乙個演算法。它引入了乙個方法能夠檢測是否真的減少了檔案大小。如果未能起到壓縮效果,就保持原來的輸入格式。lzss還移除了對偏離字元的使用,只使用對。這個壓縮演算法廣泛用於歸檔格式,如rar以及網路資料的壓縮。

4. deflate

deflate演算法於2023年提出。作者是phil katz。該演算法結合了lz77或lzss預處理器與霍夫曼編碼。霍夫曼編碼是2023年提出的訴法。它是一種熵編碼,主要基於字元出現頻度分配編碼。

5. lzma

lzma演算法,全稱是lempel-ziv markov chain algorithm(lzma),於2023年提出,是lz77的改進版,旨在實現.7z格式的7-zip檔案歸檔。它使用鏈式壓縮方法,在位元而非位元組級別上應用修改後的lz77演算法。該壓縮演算法的輸出稍後被算數編碼進行處理以便後續進一步壓縮。根據具體的實現不同,可能會引入其他的壓縮步驟。

6. lzma2

lzma2演算法於2023年提出,是lzma的改良版。它提公升了lzma在多執行緒能力上的效能以及提公升了處理不可壓縮型別資料的表現。

除了上面介紹的靜態壓縮演算法,還有基於深度學習的壓縮演算法可供選擇。

1. 基於多層感知機的壓縮演算法

多層感知機(multi-layer perceptron,mlp)技術使用多層神經元來獲取、處理以及輸出資料。它能夠被應用到資料降維任務和資料壓縮。首個基於mlp的演算法於2023年被提出,目前已經被應用到:

二進位制編碼——標準的雙符號編碼

量化——限制從連續集到離散集的輸入

特定領域內的轉換——畫素級的資料變更

mlp演算法利用分解神經網路上一步的輸出來確定最佳的二進位製碼組合。後面,使用**技術優化這個方法。**技術能夠通過反向傳播基於相鄰資料來提公升資料準確度。

3. 基於cnn的壓縮演算法

cnn是分層的神經網路,通常用於影象識別和特徵檢測。當應用到壓縮時,這些神經網路使用卷積操作來計算相鄰畫素點之間的相關性。cnn展示出了比基於mlp演算法更好的壓縮結果,提公升了超解析度下的效能以及減少了偽影。另外,基於cnn的壓縮還提公升了jpeg影象的品質,因為它減少了峰值訊雜比(psnr)和結構相似性(ssim)。基於cnn的壓縮通過使用熵估計法還實現了hevc的效能。

4. 基於生成式對抗網路(gan)的壓縮演算法

gan屬於神經網路的一種,它使用兩個神經網路彼此競爭的方式來產生更精確的分析和**。最早基於gan的壓縮演算法於2023年被提出。這些演算法的檔案壓縮比例是其他常見方法(如jpeg、webp等)的2.5倍。你可以使用基於gan的方法通過並行化處理來實現實時壓縮。主要的原理是基於最相關的特徵來壓縮。當解碼的時候,演算法基於這些特徵來重建影象。和基於cnn演算法相比,基於gan的壓縮演算法通過消除對抗損失能夠產生更高品質的影象。

總結壓縮演算法能夠幫助你優化檔案大小。不同的演算法有不同的結果。本文簡述了6種靜態的無失真壓縮演算法以及4種基於深度學習的壓縮演算法。當然,如果這些演算法都不適用於你的場景,你可以檢視這篇文章來尋找適合你場景的演算法。演算法有很多,總有一款適合你!

演算法 LZ77壓縮演算法

本人認為lz77演算法其實是字典壓縮的乙個變種,與字典壓縮不同的是,它的字典是動態生成的並且只有乙個,一般選取一定數量的最近壓縮過資料。儲存這些資料的結構叫做滑動視窗,所以lz77有被常稱作滑動視窗演算法。至於這麼生成字典的原因,其實很簡單,因為我們認為乙個要壓縮的字串很有可能與上下文相關,也就是說...

簡單實現LZ77壓縮演算法

因為哈弗曼編碼對於大檔案的壓縮有很大的侷限性 且壓縮比十分有限 所以決定根據lz77演算法寫乙個簡單的壓縮庫 組成因為時間較為緊張 目前完成了最基礎的zip演算法的編寫 即根據lz77演算法 滑動視窗壓縮 先對壓縮檔案得到乙個資料三元組 然後針對數字出現的頻率再進行哈弗曼演算法 為了更好的壓縮比 我...

lz77優化 壓縮時間 10種最佳壓縮演算法

資料壓縮是減少檔案大小,同時保留相同或可比較的資料近似值的過程。這是通過消除不必要的資料或重新格式化資料以提高效率來實現的。壓縮資料時,可以使用丟失或無損方法。丟失方法永久擦除資料,而無損保留所有原始資料。您使用的型別取決於您需要的檔案的保真度高。6 無損資料壓縮演算法 無失真壓縮演算法通常用於存檔...