データの圧縮|可逆圧縮と非可逆圧縮、ランレングスとハフマン符号

公開 2026年11月8日

画像・音声・動画はデータ量が大きいので、そのまま保存したり送ったりすると、容量も時間もかかります。データの意味を保ったまま量を減らす技術が圧縮です。共通テストでは、圧縮の手順を問題文で説明し、その手順どおりに圧縮後のデータ量を求める問題がよく出ます。

圧縮と展開

圧縮率

圧縮率 = 圧縮後のデータ量 ÷ 圧縮前のデータ量 × 100(%)

例: 200KBのファイルを50KBに圧縮した → 50 ÷ 200 × 100 = 25%

圧縮率は小さいほどよく圧縮できていることを表します。「75%小さくなった」と「圧縮率75%」を混同しないように注意しましょう。

可逆圧縮と非可逆圧縮

可逆圧縮 非可逆圧縮
展開すると 完全に元どおりになる 元どおりにはならない
圧縮のしかた 表し方を工夫するだけ 人が気づきにくい情報を捨てる
圧縮率 あまり小さくできない 大幅に小さくできる
ファイル形式の例 ZIP、PNG、GIF JPEG(画像)、MP3・AAC(音声)、MPEG-4(動画)
向いているもの 文書、プログラム、数値データ 写真、音楽、動画

文書やプログラムは、1文字でも変わると意味が変わったり動かなくなったりするので、必ず可逆圧縮を使います。写真や音楽は、人が気づかない程度の変化なら問題ないので、非可逆圧縮で大きく減らせます。

ランレングス圧縮

**ランレングス圧縮**は、同じデータが続く部分を「データ+続く個数」で表す可逆圧縮です。

例: AAAAABBBCCCCCCC(15文字)→ A5B3C7(6文字)

白黒の画像を、1行ずつ「白が何個、黒が何個」と表すときにも使えます。

例: 白白白白黒黒白白白白白白(12画素)→ 白4黒2白6

注意:逆に増えることもある

同じデータがほとんど続かない場合、かえってデータ量が増えます。

例: ABCD(4文字)→ A1B1C1D1(8文字)

圧縮の効果は、データの性質によって変わります。

ハフマン符号

ハフマン符号は、よく出てくる文字に短い符号、あまり出てこない文字に長い符号を割り当てる可逆圧縮の方法です。

例: 「AAAAABBBCD」(10文字)を圧縮する

文字 出現回数 固定長の符号(2ビット) ハフマン符号
A 5 00 0
B 3 01 10
C 1 10 110
D 1 11 111

ハフマン符号は、どの符号もほかの符号の先頭部分になっていない(0、10、110、111)ので、区切りの記号がなくても一通りに読み分けられます。例えば「010110」は、0 | 10 | 110 → A・B・C と読めます。

符号の作り方(ハフマン木)

  1. 出現回数の少ない2つを組にして、合計の回数をもつ1つのまとまりにする(C1+D1 → 2)
  2. 残りの中で、また少ない2つを組にする(2+B3 → 5)
  3. 最後の1つになるまで繰り返す(5+A5 → 10)
  4. 組にするとき、片方に0、もう片方に1を割り当て、上からたどった0と1の並びを符号にする

非可逆圧縮の工夫

非可逆圧縮では、人の感覚の特性を利用して情報を減らします。

JPEGの画像を編集して何度も保存し直すと、そのたびに情報が失われて画質が落ちていきます。

共通テストでの出題

よくある間違い

まとめ

確認問題

問題を準備しています…

関連する用語