データ圧縮の定義と目的
データ圧縮とは、元のデータをそのまま保存・転送するのに比べて、必要な情報量(目に見えるサイズや、実際に保存・転送に要する量)を減らして表すことです。多くの場合、元のデータに含まれる「繰り返し」「予測可能性」「偏り(出現しやすさの差)」などを利用し、より効率的な符号(表し方)へ置き換えます。
圧縮が有効な場面は、主に「保存容量の削減」「通信帯域の節約」「転送時間の短縮」です。ただし、どんなデータでも無条件に小さくできるわけではなく、特に圧縮済みデータやランダム性の高いデータでは効果が薄いことがあります。
可逆圧縮と非可逆圧縮の違い
データ圧縮は大きく可逆圧縮と非可逆圧縮に分かれます。
- 可逆圧縮:圧縮したデータを復元すると、元データと完全に同じ内容に戻せます。検査(ハッシュなど)で一致を確認できるのが特徴です。
- 非可逆圧縮:復元しても元と完全一致には戻りません。人間が気づきにくい誤差(たとえば色の微細な差や音の一部など)を許容する代わりに、より大きな圧縮が狙えます。
ここで重要なのは、「圧縮率が高いほど必ず良い」とは限らない点です。非可逆では品質劣化が増えることがあり、可逆でも圧縮が弱いデータではほとんどサイズが減らないことがあります。
代表的な方式:符号化の考え方
方式名は製品や実装で多様ですが、設計の発想は共通点が多くあります。理解の助けとして、次の観点で捉えると整理しやすくなります。
-
繰り返しを見つけて短く表す(辞書・パターン参照の発想) 同じ並びが何度も現れる場合、その並びそのものを何回も書かずに「どのパターンを使ったか」の情報に置き換えます。
-
予測して差分だけを符号化する(差分・予測の発想) 次に来る値をある程度予測し、実際との差分だけを書きます。予測が当たりやすいデータほど有利です。
-
出現頻度の偏りを符号に反映する(統計的符号化の発想) 頻出のものは短い符号、稀なものは長い符号にすることで、全体の平均符号長を減らします。
-
非可逆では「人が気づきにくい情報」や「細部の削り方」を調整 非可逆の場合、どこまで削ってよいか(品質の許容範囲)を調整し、その範囲に合わせて圧縮の強さが変わります。結果は画像・音声・動画などの種類で変わります。
なお、同じ「方式」でも、実装の最適化や設定次第で結果が変わるため、効果を断定するのは難しい点に注意が必要です。
ツールで確認すべき制限と観点
圧縮ツールを使うときは、「小さくなったか」だけで判断せず、少なくとも次を確認すると失敗を減らせます。
- 可逆であることの確認:圧縮→復元で内容が一致するか(テキストなら同一性、バイナリならハッシュ一致など)を見ます。 - 非可逆の劣化範囲:見た目・聞こえ方・再生品質だけでなく、拡大して比較するなどして、どの程度の差が出るか把握します。 - 圧縮率だけでなく時間も見る:圧縮・伸長(復元)にかかる時間は、実用上のボトルネックになりえます。
