簡單實現LZ77壓縮演算法

2021-10-01 20:30:41 字數 607 閱讀 6732

因為哈弗曼編碼對於大檔案的壓縮有很大的侷限性 且壓縮比十分有限 所以決定根據lz77演算法寫乙個簡單的壓縮庫

組成因為時間較為緊張 目前完成了最基礎的zip演算法的編寫 即根據lz77演算法(滑動視窗壓縮)先對壓縮檔案得到乙個資料三元組 然後針對數字出現的頻率再進行哈弗曼演算法 為了更好的壓縮比 我並沒有先參考的資料中的方法 採用了建三棵哈弗曼樹的做法

效率對於一般的檔案 壓縮比可以達到百分之30到40

對於重複性較高的檔案 壓縮比可以達到百分之10到20 甚至更低

且克服了哈弗曼編碼無法壓縮大檔案的缺點不足

在計算資料三元組的時候使用了乙個o(n2)的樸素匹配 使得效率比預想的更為不盡人意 改進之處可以參考lz4演算法 在匹配時使用雜湊降低時間複雜度

因為是壓縮庫 本來想再順便寫乙個打包工具 但是時間臨近期末 有點緊張 遂打算假期補上

使用整體使用c++17編寫 關鍵部分提供注釋

只需要把本資料夾放在您的專案中 然後包含"lzl-zip.h"即可

//預設壓縮名稱為 xxx.lzl-zip

g++ -std=c++17 test.cpp -o test

引用

演算法 LZ77壓縮演算法

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

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

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

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

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