可逆圧縮の基礎から実務まで徹底解説:定義・代表アルゴリズム・フォーマット・評価指標と運用ポイント
可逆圧縮とは何か — 基本定義
可逆圧縮(ロスレス圧縮、lossless compression)は、元のデータを完全に復元できる圧縮手法を指します。圧縮後に再展開(復元)した結果がビット単位で元と一致する点が不可欠です。テキスト、プログラムの実行ファイル、ソースコード、医療画像、法的文書、バックアップなど、正確性が求められる用途で使われます。
圧縮の原理:モデル化と符号化の二段階
可逆圧縮は大きく分けて「モデル化(予測/変換)」と「符号化(エントロピー符号化)」の二段階で説明できます。
- モデル化(モデリング):データの内部構造や繰り返し、相関を取り出して、出現確率を高める・冗長性を集約する処理。例:差分(delta)符号化、Burrows–Wheeler 変換(BWT)、移動平均的な予測など。
- 符号化(エントロピー符号化):モデル化で得られた確率分布に基づいて、より出現しやすいシンボルに短いビット列を割り当てる処理。例:ハフマン符号、算術符号、レンジ符号など。
情報理論的背景:エントロピーとシャノンの定理
クロード・シャノンの情報理論が基礎です。データ列のエントロピー(平均情報量)は、そのデータを最も効率よく符号化したときの平均ビット数の下限を決めます(情報源符号化定理)。すなわち、理想的には平均符号長はエントロピーに近づけることが目標です。完全にランダムなデータは高エントロピーであり、ほとんど圧縮できません。
代表的な可逆圧縮手法(アルゴリズム)
用途や要求される速度・メモリ・ランダムアクセス性に応じて様々なアルゴリズムがあります。以下は主要なものの概観です。
- ランレングス符号化(RLE):同じシンボルの連続を長さ+値で表現。単純で高速だが、連続が少ないデータでは効果が薄い。画像の単純領域やフォーマットのヘッダ圧縮などで使われる。
- ハフマン符号(Huffman Coding):出現頻度に基づく可変長符号。簡便で復号も高速。ただし確率が分数的だと最適からずれることがある(符号長は整数ビット単位)。
- 算術符号・レンジ符号:シンボル列全体を一つの実数区間で表現する手法で、ハフマンより理論的にエントロピーに近づけることが可能。実装はハフマンより複雑だが、圧縮効率が高い。
- LZ77 / LZ78 系(Lempel–Ziv):過去に出現した「文字列」を辞書として参照して置換する方式。LZ77 はスライディングウィンドウ(例:gzip の基礎)、LZ78 や派生の LZW(GIF など)も広く使われる。長い繰り返しに強い。
- BWT(Burrows–Wheeler 変換)+MTC(Move-to-front)+ハフマン/算術:まずデータを変換して同じシンボルを集め、そのあとランレングスやエントロピー符号化を適用する代表的パイプライン(例:bzip2)。
- LZMA(7z)、Brotli、DEFLATE(gzip/zip/PNG)、bzip2:実用的な圧縮アルゴリズム群。DEFLATE は LZ77 とハフマンを組み合わせ、Brotli は文脈モデル+LZ77系+ハフマン、LZMA は高度な辞書と算術的なエントロピー処理を使う。
フォーマットと用途例
- 汎用アーカイブ・圧縮:ZIP(DEFLATE)、gzip(DEFLATE)、7z(LZMA)、bzip2、xz(LZMA)など。バックアップや配布用。
- 画像:PNG(可逆、DEFLATE ベース)、TIFF(可逆オプションあり)、WebP(ロスレスモード)など。
- 音声・音楽:FLAC、ALAC(Apple Lossless)などは音質を完全保持しつつ圧縮。
- 映像:一般には映像は可逆でないことが多いが、特殊な用途では可逆コーデック(例:FFV1、Apple ProRes の可逆モード等)もある。
圧縮率・速度・メモリのトレードオフ
可逆圧縮では「圧縮率(ファイルサイズ)」「圧縮時間」「復元時間」「メモリ使用量」「ランダムアクセス性」がトレードオフ関係にあります。高圧縮率を追求するほど複雑なモデルや大きな辞書、ブロック単位の解析が必要になり、処理時間やメモリを消費することが多いです。逆に高速かつ低メモリを優先すると圧縮効率は下がります。
評価指標と実用上の注意点
- 圧縮比(Compression Ratio):元のサイズに対する圧縮後サイズの割合。
- エントロピーとの比較:理論上の下限であるエントロピーとどれだけ近いかを評価する。
- オーバーヘッド:ヘッダや辞書、メタデータによる固定オーバーヘッドは小さいファイルで効いてくる。
- ランダムアクセス性:大きなアーカイブで一部のファイルだけを頻繁に取り出す用途では、ブロック化や索引が重要。
- エラー耐性:圧縮データが壊れるとブロック全体が復元不能になることがある。チェックサムやブロック単位復号が対策になる。
- 暗号化との併用:圧縮後に暗号化するのが原則(暗号化後は圧縮効果が出ない)。逆に暗号化情報を圧縮すると効果は薄い。
可逆圧縮と非可逆(ロッシー)圧縮の違い
非可逆圧縮(例:JPEG、MP3、AAC、JPEG2000の一部)はデータの一部を捨てて人間の感覚にとって重要でない部分のみを残すことで高い圧縮率を得ます。可逆圧縮は元に戻せる一方で、同じ圧縮率では一般にロッシーよりサイズが大きくなります。用途に応じて使い分けます(例:写真配信用はロッシー、法的文書は可逆)。
実装上のコツと運用ポイント
- データ特性を理解する:テキスト、バイナリ、画像、音声で最適手法は変わる。例えばソースコードは差分やgzipでよく圧縮できる。
- 前処理(正規化)を検討する:同一表記の統一や差分化で冗長性を増やせる。
- ブロックサイズの調整:大きいほど圧縮率は向上するがメモリや遅延が増す。
- 検証と回帰テスト:可逆性(ビット一致)を必ずテストに含める。ハードウェアバグや実装バグで一部のデータが壊れることがある。
- 圧縮の自動化:バックアップやログローテーションの際に圧縮を取り入れると容量削減の効果が高い。
研究動向と今後の展望
従来のアルゴリズムは依然として実用上重要ですが、近年は機械学習を用いた符号化・予測モデルの研究が進んでいます。画像分野では学習ベースの「ロスレス圧縮」も提案され、テキストやバイナリ列に対する深層学習によるモデリング研究もあります。ただし学習ベース手法は学習コスト、モデルサイズ、実行速度の問題があり、まだ広く置き換えているわけではありません。
まとめ
可逆圧縮は「元に完全復元できる」ことを最重要とする圧縮手法の総称で、エントロピー理論に基づく符号化と、データの冗長性を引き出すモデリングの組合せで成り立っています。用途に応じて最適なアルゴリズム・フォーマットを選び、圧縮率と速度・メモリのトレードオフを意識することが重要です。業務用途では可逆性の検証、ブロック設計、チェックサムなどの運用面も忘れないようにしましょう。
参考文献
- 可逆圧縮 - Wikipedia(日本語)
- Lossless compression - Wikipedia
- Entropy (information theory) - Wikipedia
- Huffman coding - Wikipedia
- Arithmetic coding - Wikipedia
- Lempel–Ziv (LZ77, LZ78, LZW) - Wikipedia
- RFC 1951 — DEFLATE Compressed Data Format Specification
- RFC 7932 — Brotli Compressed Data Format
- PNG (Portable Network Graphics) Specification — W3C
- FLAC — Free Lossless Audio Codec
- Burrows–Wheeler transform - Wikipedia
- David Salomon, "Data Compression: The Complete Reference"(書籍)


