結論から言うと: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バイト | 教学例 |
| DEFLATE | 32KB | 258バイト | 258バイト | ZIP/GZIP/PNG |
| LZMA | 8MB(できる配) | 273バイト | 273バイト | 7z/xzアーカイブ |
| LZ4 | 64KB | い制限 | い制限 | 実時圧縮 |
| ZSTD | 8MB(最大きい1GB) | い制限 | い制限 | 现代通を用いて |
2. 三元グループエンコード形式
LZ77 の輸出単元は三元グループ (distance, length, next_char)、三つフィールドの含義例えば下テーブル。
| フィールド | 含義 | 取値範囲(DEFLATE) | エンコードビット数 | 例 |
|---|---|---|---|---|
| distance | 回溯距離(へ後などの程度か文字找マッチ) | 1–32768 | 15 bit | distance=10 → へ前10つ文字 |
| length | マッチ長度(連续マッチなどの程度か文字) | 3–258 | 8 bit | length=5 → マッチ5つ文字 |
| next_char | マッチ後の下一つ文字 | 0–255 | 8 bit | next_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 | ビット置1 | abracadabra | 空、いマッチ | (0, 0, 'a') | 首つ文字、直接輸出 |
| 2 | ビット置2 | bracadabra | "a"、いマッチ"b" | (0, 0, 'b') | 首次出現、直接輸出 |
| 3 | ビット置3 | racadabra | "ab"、いマッチ"r" | (0, 0, 'r') | 首次出現、直接輸出 |
| 4 | ビット置4 | acadabra | "abr"中找まで"a" | (0, 0, 'a') | "a"出現しかし後续不マッチ |
| 5 | ビット置5 | cadabra | "abra"中い"c" | (0, 0, 'c') | 首次出現、直接輸出 |
| 6 | ビット置6 | adabra | "abrac"中找まで"a" | (0, 0, 'a') | "a"マッチしかし後续不マッチ |
| 7 | ビット置7 | dabra | "abraca"中い"d" | (0, 0, 'd') | 首次出現、直接輸出 |
| 8 | ビット置8 | abra | 回溯7找まで"abra"マッチ | (7, 4, end) | マッチ"abra"4つ文字 |
エンコード効率で比較:
| エンコード方法 | 輸出単元数 | 各単元bit | 総bit | vs元節省 |
|---|---|---|---|---|
| ASCII元 | 11文字 | 8 | 88 | —(基準) |
| LZ77(いマッチ最適化) | 8三元グループ | 31(平均) | 248 | -182%(膨胀) |
| LZ77(最適化標記ビット) | 8単元 | 12(平均) | 96 | -9%(略膨胀) |
| LZ77+Huffman | 8単元 | 4.5(平均) | 36 | 59% |
結果分析: 纯 LZ77 に対して短い文字串できる膨胀(三元グループより元文字占を用いてさらに空間)、このであるはである何 LZ77 通常と Huffman エンコードグループ合使用—DEFLATE であるは LZ77 + Huffman。で"abracadabra"事例中、ビット置 8 のマッチ"abra"(distance=7, length=4)は重要圧縮点、4 つ文字を用いて一つ三元グループテーブル示。に対してに更長、重復模式さらにのテキスト(例えばコードファイル、ログ)、LZ77 の圧縮効果できる顕著へ上。
四、LZ77 変体と现代演化
LZ77 自 1977 年提出後衍生出大量の変体、各つ変体針に対して特定シナリオ最適化あるつ次元。以下のテーブルで比較主ストリーム LZ77 家族成員。
| アルゴリズム | 重要改進 | 圧縮率 | 圧縮速度 | 解凍速度 | 典型適用 |
|---|---|---|---|---|---|
| LZ77(元) | 三元グループエンコード | 低い | 遅い | 中 | 教学 |
| LZSS | を用いて標記ビット区分マッチ/字面量 | 中 | 中 | 速い | 早い期システム |
| DEFLATE | LZSS+Huffman2階段 | 中高い | 中 | 速い | ZIP/GZIP/PNG |
| LZMA | 大きいウィンドウ+区間エンコード+最優解析 | 高い | 遅い | 中 | 7z/xzアーカイブ |
| LZ4 | 牺牲圧縮率換極致速度 | 低い | 極速い | 極速い(4GB/s) | 実時/内核 |
| LZW | 明示の辞書テーブル(非滑動ウィンドウ) | 中 | 速い | 速い | GIF/TIFF |
| ZSTD | LZ77変体+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以上の形式に対応。ローカル圧縮でデータは外部に送信されません。