圧縮アルゴリズム
基本的には、簡易関数のcompressとdecompressを使う方法にする
13. データ圧縮とアーカイブ — Python 3.6.5 ドキュメント
gzip
GNUのgzip形式を扱うモジュール
tarの後に実行して、tar.gzの形でお目にかかることが多い。
Lempel-Zivアルゴリズム (LZ77) とハフマン符号を使っている。
LZ77は先頭から順番に符号化していって、符号化の時に過去に符号化した内容と同じだったら、
過去に出たところのポインタと長さで置き換える処理。
gzip - Wikipedia
bzip2
こちらもtarの後に実行して、tar.bz2の形でお目にかかることが多い。
ブロックソート(バロウズ-ホイラー変換)とMTF (Move-To-Front) 法、ハフマン符号を使っている。
ブロックソートはデータを並び替えて圧縮しやすい形式に変換する前処理。
MTFは圧縮する記号を入れ替えるテーブルを使ってデータが偏るようにするらしい前処理。
gzipよりも効率的な圧縮がされるらしくて、比較的大きなファイル向け。
今回扱う小さめのデータだとあまり効果は出ないかも。
bzip2 - Wikipedia
LZMA
辞書圧縮を行うアルゴリズムとLZ77を改良したものとレンジコーダーというのを使っている。
よく分かっていないけどbzip2よりも効率的らしい。
Lempel-Ziv-Markov chain-Algorithm - Wikipedia
やってみる
やって見るデータ
個人的にちょっとやってみたいデータがあるので以下の4つのデータを圧縮してみる。
- テキスト
日本語で1万字程度のテキストデータ
- 音声
10分程度の音声(WAVE形式のステレオ音楽)
- 画像
3840x2160のフルカラー画像
- 大きいバイナリ
UbuntuのOSイメージ