UGLYPEAR AIが事業をアップグレード:高性能ドキュメント圧縮 × RAGデータエンジニアリング基盤新事業を詳しく見る →

LZ77アルゴリズム詳解:辞書圧縮はの作業の?

結論から言うと:LZ77 は一種類基に滑動ウィンドウの辞書圧縮アルゴリズム、コア思想は"を用いて歴史データ做辞書、遇まで重復コンテンツである引を用いて回行く"。エンコード時輸出三元グループ (distance, length, next_char):回溯 distance つ文字找までマッチ、マッチ長度 length、紧と一つ未マッチ文字 next_char。で"abracadabra"この 11 つ文字である例、LZ77 エンコード後僅必要 5 つ三元グループ可能性性性性テーブル示、圧縮効果顕著。LZ77 は DEFLATE(ZIP/GZIP/PNG)のコアグループ件、もは LZSS/LZMA/LZ4 等现代圧縮アルゴリズムの共に祖先。以下では滑動ウィンドウ原理から説明し、逐步演示エンコードプロセス。

もし Huffman エンコードの原理まだ慣れていい場合は、まずHuffman エンコード原理:圧縮アルゴリズムの基石詳解

一、とは辞書圧縮

圧縮アルゴリズム分2大きいストリーム派:統計エンコード(例えば Huffman エンコード)に応じて文字頻度分配変長碼字;辞書圧縮を用いて"指針引を用いて"の代わりに換重復コンテンツ。LZ77 属に辞書圧縮ストリーム派、不預先構建辞書テーブル、そしてを用いてすでに処理の歴史データ作である暗黙の辞書—遇まで重復コンテンツ時、を用いて一つ"回溯指針"指へ前出現過のビット置。

圧縮ストリーム派コア原理代テーブルアルゴリズム優势劣势
統計エンコードに応じて頻度分配変長碼Huffman, 算術エンコード逼近熵下界不擅長長程重復
辞書圧縮を用いて引を用いての代わりに換重復コンテンツLZ77, LZW, LZMA擅長重復模式に対して随機データい效
混合エンコード辞書+統計2階段DEFLATE, ZSTD综合最も優実現比較較複雑
変換エンコード変換まで頻域再度量化DCT(JPEG), DWTある损圧縮効率高いある情報損失

実践中最もストリーム行の圧縮アルゴリズムほぼすべては"混合エンコード"—先を用いて LZ77 消除く重復模式、再度を用いて Huffman に対して残差做頻度圧縮。DEFLATE であるは LZ77 + Huffman の経典グループ合、される ZIP、GZIP、PNG 広泛使用。

二、LZ77 アルゴリズム原理詳解

LZ77 のコアは滑動ウィンドウ機制。ウィンドウ分である2一部:検索缓沖区(すでに処理の歴史データ)・前視缓沖区(待機中の未来るデータ)。エンコード時以前視缓沖区取一段コンテンツ、で検索缓沖区中検索最長マッチ、找までである輸出三元グループ、找不までである輸出元文字。

1. 滑動ウィンドウ構造

滑動ウィンドウのサイズ直接決定圧縮効果—ウィンドウ大きいほど、できる回溯検索の歴史データ多くいほど、マッチ概率高いほど。異るアルゴリズムのウィンドウサイズ差異非常ににににににに大きい。

アルゴリズム検索缓沖区前視缓沖区最大きいマッチ長度典型シナリオ
LZ77元幾KB十幾バイト16バイト教学例
DEFLATE32KB258バイト258バイトZIP/GZIP/PNG
LZMA8MB(できる配)273バイト273バイト7z/xzアーカイブ
LZ464KBい制限い制限実時圧縮
ZSTD8MB(最大きい1GB)い制限い制限现代通を用いて

2. 三元グループエンコード形式

LZ77 の輸出単元は三元グループ (distance, length, next_char)、三つフィールドの含義例えば下テーブル。

フィールド含義取値範囲(DEFLATE)エンコードビット数
distance回溯距離(へ後などの程度か文字找マッチ)1–3276815 bitdistance=10 → へ前10つ文字
lengthマッチ長度(連续マッチなどの程度か文字)3–2588 bitlength=5 → マッチ5つ文字
next_charマッチ後の下一つ文字0–2558 bitnext_char='d' → ASCII 100

三元グループの巧妙の処でに:マッチ結束後多く輸出一つ next_char、保証エンコーダー総できるへ前推進至少ない 1 つ文字、しい卡死。もし找不までいかなるマッチ(length=0)、distance ・ length すべてである 0、のみ輸出 next_char—相されるに退化である元文字ストレージ。

3. マッチ検索戦略

マッチ検索は LZ77 のパフォーマンスボトルネック—以前視缓沖区取一段コンテンツ、で検索缓沖区中找最長マッチ。暴力検索は O(n×m) 複雑度、実際実現を用いてハッシュテーブルまたは拡張子樹加速。

検索戦略データ構造検索複雑度空間開销典型適用
暴力検索O(n×m)教学例
ハッシュ链ハッシュテーブル+链テーブルO(n)平均低いzlib(DEFLATE)
ハッシュ桶ハッシュテーブル+数グループO(1)平均LZ4
拡張子樹拡張子樹/拡張子数グループO(n)最も壊高いLZMA

三、実戦事例:"abracadabra"エンコード演示

を用いて LZ77 に対して"abracadabra"(11 つ文字)行う完整エンコード。初始状態検索缓沖区である空、前視缓沖区である整つ文字串。逐つビット置掃描、で歴史データ中検索最長マッチ。

原文: a b r a c a d a b r a

エンコードプロセス:

ステップされる前ビット置前視コンテンツ検索缓沖区検索輸出三元グループ説明
1ビット置1abracadabra空、いマッチ(0, 0, 'a')首つ文字、直接輸出
2ビット置2bracadabra"a"、いマッチ"b"(0, 0, 'b')首次出現、直接輸出
3ビット置3racadabra"ab"、いマッチ"r"(0, 0, 'r')首次出現、直接輸出
4ビット置4acadabra"abr"中找まで"a"(0, 0, 'a')"a"出現しかし後续不マッチ
5ビット置5cadabra"abra"中い"c"(0, 0, 'c')首次出現、直接輸出
6ビット置6adabra"abrac"中找まで"a"(0, 0, 'a')"a"マッチしかし後续不マッチ
7ビット置7dabra"abraca"中い"d"(0, 0, 'd')首次出現、直接輸出
8ビット置8abra回溯7找まで"abra"マッチ(7, 4, end)マッチ"abra"4つ文字

エンコード効率で比較:

エンコード方法輸出単元数各単元bit総bitvs元節省
ASCII元11文字888—(基準)
LZ77(いマッチ最適化)8三元グループ31(平均)248-182%(膨胀)
LZ77(最適化標記ビット)8単元12(平均)96-9%(略膨胀)
LZ77+Huffman8単元4.5(平均)3659%

結果分析: 纯 LZ77 に対して短い文字串できる膨胀(三元グループより元文字占を用いてさらに空間)、このであるはである何 LZ77 通常と Huffman エンコードグループ合使用—DEFLATE であるは LZ77 + Huffman。で"abracadabra"事例中、ビット置 8 のマッチ"abra"(distance=7, length=4)は重要圧縮点、4 つ文字を用いて一つ三元グループテーブル示。に対してに更長、重復模式さらにのテキスト(例えばコードファイル、ログ)、LZ77 の圧縮効果できる顕著へ上。

四、LZ77 変体と现代演化

LZ77 自 1977 年提出後衍生出大量の変体、各つ変体針に対して特定シナリオ最適化あるつ次元。以下のテーブルで比較主ストリーム LZ77 家族成員。

アルゴリズム重要改進圧縮率圧縮速度解凍速度典型適用
LZ77(元)三元グループエンコード低い遅い教学
LZSSを用いて標記ビット区分マッチ/字面量速い早い期システム
DEFLATELZSS+Huffman2階段中高い速いZIP/GZIP/PNG
LZMA大きいウィンドウ+区間エンコード+最優解析高い遅い7z/xzアーカイブ
LZ4牺牲圧縮率換極致速度低い極速い極速い(4GB/s)実時/内核
LZW明示の辞書テーブル(非滑動ウィンドウ)速い速いGIF/TIFF
ZSTDLZ77変体+FSE+辞書預設高い速い極速い现代通を用いて

から演化趋势看、现代アルゴリズム(ZSTD、brotli)で保持高い圧縮率の同時に大幅へ上速度、逐漸取代 DEFLATE 成である新しい一代標準。しかし LZ77 のコア思想—滑動ウィンドウ辞書引を用いて—始終未変、ところある変体すべて建立でこのつ基礎の上。

シナリオ推奨アルゴリズム理により圧縮率参照
ファイルアーカイブLZMA(xz)圧縮率最も高い、不追求速度70%–85%
通を用いて圧縮ZSTD圧縮率・速度兼顧60%–80%
実時変換送LZ4解凍速度4GB/s、延遅極低い50%–65%
Web変換送DEFLATE/GZIP互換性最も良い、ところあるブラウザーサポート50%–70%
画像形式DEFLATE(PNG)できる逆圧縮、適したグラフィカルクラス50%–75%
メモリデータLZ4低いCPU占を用いて、適した高い頻圧縮50%–65%

について PNG 形式中 DEFLATE の具体の適用、を参照してくださいPNG 圧縮原理詳解。できる逆圧縮とある损圧縮の違い、を参照してくださいできる逆圧縮 vs ある损圧縮:コア違い

五、よくある質問FAQ

Q1:LZ77アルゴリズムとは?

LZ77 は一種類基に滑動ウィンドウの辞書圧縮アルゴリズム、により Lempel ・ Ziv に 1977 年提出。コア思想は:を用いて前すでに処理のデータ作である辞書、遇まで重復コンテンツ時を用いて (distance, length, next_char) 三元グループの代わりに換元データ、distance テーブル示回溯距離、length テーブル示マッチ長度、next_char テーブル示マッチ後の下一つ文字。LZ77 は DEFLATE(ZIP/GZIP/PNG) のコアグループ件、もは LZSS/LZMA/LZ4 等现代アルゴリズムの祖先。

Q2:LZ77の滑動ウィンドウとは意思?

滑動ウィンドウは LZ77 のコアデータ構造、分である検索缓沖区(すでに処理の歴史データ)・前視缓沖区(待機中の未来るデータ)。エンコード時以前視缓沖区中取一段コンテンツ、で検索缓沖区中検索最長マッチ。典型ウィンドウサイズである 32KB(DEFLATE 標準)、ウィンドウ大きいほどマッチ概率高いほどしかしメモリ開销大きいほど。ウィンドウサイズ決定最大きい回溯距離 distance の上限。

Q3:LZ77・LZ78ある何違い?

LZ77 を用いて滑動ウィンドウ做暗黙の辞書、マッチコンテンツ直接引を用いて歴史データ、不単独ストレージ辞書;LZ78 を用いて明示の辞書テーブル、をすでに見の文字串番号ストレージである辞書条目、エンコード時輸出辞書インデックス。LZ77 更適したある局部重復のデータ(例えばテキスト)、LZ78 更適したすべて局重復のデータ。実践中 LZ77 の後代(DEFLATE/LZMA/LZ4)遠より LZ78 の後代(LZW)更ストリーム行。

Q4:LZ77、LZMA、LZ4どつ圧縮率最も高い?

圧縮率ソート:LZMA > LZ77(DEFLATE) > LZ4。LZMA を用いてより大きいのウィンドウ(デフォルト 8MB)、更優のマッチアルゴリズム・区間エンコード、圧縮率最も高いしかし速度最も遅い;DEFLATE ウィンドウ 32KB + Huffman、圧縮率中等速度中等;LZ4 牺牲圧縮率換取極致速度、圧縮率最も低いしかし解凍速度できる達 4GB/s。選型取决にシナリオ:アーカイブ選 LZMA、通を用いて選 DEFLATE/ZSTD、実時選 LZ4。

まとめ

LZ77 は辞書圧縮アルゴリズムの鼻祖、コア原理は"滑動ウィンドウ + 三元グループ引を用いて":を用いて歴史データ做暗黙の辞書、遇まで重復コンテンツである輸出 (distance, length, next_char) 三元グループ。纯 LZ77 に対して短いテキストできる膨胀、しかしと Huffman エンコードグループ合後(DEFLATE)成である ZIP/GZIP/PNG の標準圧縮ソリューションョン。现代変体 LZMA 追求極致圧縮率、LZ4 追求極致速度、ZSTD 兼顧2者。

理解 LZ77 の重要三点:一は滑動ウィンドウ決定マッチ範囲(DEFLATE 32KB、LZMA 8MB)、二は三元グループは基このなのなのなエンコード単元(回溯+長度+下一文字)、三はマッチ検索戦略決定パフォーマンス(ハッシュ链最も速い、拡張子樹最も優)。LZ77 + Huffman の混合エンコードは现代できる逆圧縮の金標準。

ファイルを圧縮てみませんか?SmartSlimを試す

独自開発のRust圧縮エンジンに基づき、PDF/画像/動画/Office/OFDど10分野40以上の形式に対応。ローカル圧縮でデータは外部に送信されません。