ハフマン符号
文字列 AAAABBCD(8文字)を例にハフマン符号と情報量の関係を整理します。
1. 出現回数・確率・情報量
| 文字 | 回数 | 確率 p | 情報量 −log₂p |
|---|---|---|---|
| A | 4 | 1/2 | 1 |
| B | 2 | 1/4 | 2 |
| C | 1 | 1/8 | 3 |
| D | 1 | 1/8 | 3 |
出現頻度が高いほど確率が大きく、情報量は小さくなります。
2. ハフマン木
左の枝=0、右の枝=1。
3 木の作り方(ノードの数字の意味)
ノードの数字は「その配下にある文字の出現回数の合計」。手順はシンプル。
- 一番回数が少ない2つを選んで結合する
- 新ノードの数字 = 2つの回数の合計
- 1つにまとまるまで繰り返す
C(1)+D(1) → 2 / B(2)+2 → 4 / A(4)+4 → 8(ルート=総文字数と一致)
4. 根から葉までの符号
| 文字 | 符号 | ビット数 |
|---|---|---|
| A | 0 |
1ビット |
| B | 10 |
2ビット |
| C | 110 |
3ビット |
| D | 111 |
3ビット |
5. 符号化と圧縮結果
AAAABBCD → ハフマン符号:
0,0,0,0,10,10,110,111
| 方式 | ビット数 |
|---|---|
| 固定長(2bit×8文字) | 16ビット |
| ハフマン符号 | 14ビット |
| 理論限界(エントロピー) | 14ビット |
固定長は文字種 4 種(A,B,C,D)を区別するため 2 ビット必要です → $2 \times 8=16$ ビットになります。
ハフマン符号は14ビットです。
6. なぜ14ビットが理論の限界なのか
平均情報量(エントロピー) $H$ は、各文字の確率×情報量の合計:
\[\begin{aligned} H = -\frac{1}{2}\log_{2}\frac{1}{2} -\frac{1}{4}\log_{2}\frac{1}{4} -\frac{1}{8}\log_{2}\frac{1}{8} -\frac{1}{8}\log_{2}\frac{1}{8} \\ H = \frac{1}{2} \times 1 + \frac{1}{4} \times 2 + \frac{1}{8} \times 3 + \frac{1}{8} \times 3 = 1.75 ビット \end{aligned}\]8 文字ぶんなら $1.75 \times 8 = 14\ ビット$ 。
ハフマン符号の結果と一致します。
これは各文字の確率がちょうど 1/2, 1/4, 1/8, 1/8 のように 2 のべき乗の逆数 になっている特別なケースだからです。一般にはハフマン符号はエントロピーに近いですが、必ずしも完全一致するとは限りません。