情報理論 第13回 ランレングス符号
前回見たように、ハフマン符号ではシンボルの出現率が偏っているほど平均符号長が短くなり、効率が良くなる。しかし、これはシンボルが多数ある場合にだけ起きることであり、シンボルが2種類だけの場合はハフマン符号を使っても効率は改善されない。
例
モノクロの画像は白と黒のどちらかのピクセルだけで構成されるので、白と黒のピクセルをシンボル
W
,
B
と考えれば、この画像はこの2文字からなる「文」として扱うことができる。
図のような画像では白のピクセルが黒よりずっと多く、シンボル
W
が発生する確率はもう一方よりもずっと高い。
しかし、シンボルが2種類しかないので、ハフマン符号は結局
シンボル
符号語
W
0
B
1
となり、画像の情報を送るにはピクセル数と同じビット数のデータが必要になってしまう。
固定長ランレングス符号
シンボルが2種類しかないときは、それらの組み合わせをシンボルとして扱うことで効率のよい符号化ができる。例えば上のケースで
B
が出たら区切る
W
が3個続いたら区切る
というルールでブロックを作ると「
B
」「
W
B
」「
W
W
B
」「
W
W
W
」の4種類ができる。これらを「シンボル」として扱い、
「シンボル」
符号語
B
00
W
B
01
W
W
B
10
W
W
W
11
のような等長符号を作ることができる (呼び名が紛らわしいので、以降は
W
W
B
などを「」つきで「シンボル」、本来の
W
,
B
のことは単にシンボルと書く)。このような符号を
固定長ランレングス符号
という。
この符号を使えば、上の例の拡大部分の左上から右の29ピクセル分は
W
W
W
,
W
W
W
,
W
W
W
,
W
W
W
,
W
W
W
,
W
W
B
,
B
,
W
W
W
,
B
,
W
W
W
→ 11 11 11 11 11 10 00 11 00 11
となり、20ビットのデータで送ることができる。
白の割合がもっと多い場合なら、「シンボル」を8種類 (最大7文字)、符号長を3にして
「シンボル」
符号語
B
000
W
B
001
W
W
B
010
・・・
・・・
W
W
W
W
W
W
B
110
W
W
W
W
W
W
W
111
のようにすればさらに効率を上げられる。
固定長ランレングス符号の平均符号長は以下のようにして求める。
平均符号長は (本来の) シンボル1つあたりに平均して割り当たる符号語の長さだが、固定長ランレングス符号の表は (ブロック化された)「シンボル」に対するものなので、まずは「シンボル」の長さの平均値を求める。
シンボル
B
が発生する確率が
p
なら、それぞれの「シンボル」が発生する確率は
X
'
=
x
B
x
W
B
x
W
W
B
x
W
W
W
p
(
1
-
p
)
p
(
1
-
p
)
2
p
(
1
-
p
)
3
となる。そのため、「シンボル」の平均の長さ (
W
,
B
が何個あるか) は
n
3
=
p
+
2
(
1
-
p
)
p
+
3
(
1
-
p
)
2
p
+
3
(
1
-
p
)
3
となる (
n
の右下の3は「シンボル」が最長3文字であることをあらわす) 。この第1~3項は次のようにまとめられる。
n
3
=
p
1
-
p
(
(
1
-
p
)
+
2
(
1
-
p
)
2
+
3
(
1
-
p
)
3
)
+
3
(
1
-
p
)
3
=
p
1
-
p
∑
r
=
1
3
r
(
1
-
p
)
r
+
3
(
1
-
p
)
3
まとめた項は、数学の公式
∑
r
=
1
N
r
x
r
=
x
(
1
-
x
N
)
(
1
-
x
)
2
-
N
x
N
+
1
1
-
x
・・・①
の左辺で
x
を
1
-
p
、
N
を3と置いたものに等しいので、
n
3
=
p
1
-
p
(
(
1
-
p
)
(
1
-
(
1
-
p
)
3
)
(
1
-
(
1
-
p
)
)
2
-
3
(
1
-
p
)
3
+
1
1
-
(
1
-
p
)
)
+
3
(
1
-
p
)
3
=
1
-
(
1
-
p
)
3
p
-
3
(
1
-
p
)
3
+
3
(
1
-
p
)
3
=
1
-
(
1
-
p
)
3
p
となる。平均符号長、すなわち(本来の)シンボル1つあたりの符号長は、「「シンボル」1つあたりの符号長」(
L
‾
と書く。すべての符号語の長さが2なので
L
‾
=
2
) を「1つの「シンボル」の平均の長さ」(いま求めた
n
3
) で割って
L
=
L
‾
n
3
=
2
p
1
-
(
1
-
p
)
3
となる。
練習問題1
上の例の条件で、
p
=
0.1
のときの平均符号長を求めよ。ただし、計算結果は四捨五入して小数第二位までにすること (スマホの電卓機能などを使ってよい)。
※ 上の式の
p
に0.1を代入するだけ。
練習問題2
「シンボル」を8種類、符号語を3ビットに拡張した場合の平均符号長を
p
の関数の形で記述せよ。
※ まず「シンボル」の平均の長さ
n
7
を求める。
※ 符号語はすべて3ビットなので、
L
‾
=
3
を
n
7
で割ったものが平均符号長になる。
練習問題3
練習問題2の条件で
p
=
0.1
のときの平均符号長の値を求めよ。ただし、計算結果は四捨五入して小数第二位までにすること (スマホの電卓機能などを使ってよい)。
ランレングスハフマン符号
上記のようにしてつくった「シンボル」に、等長符号ではなくハフマン符号を割り当ててやれば、もっと効率のよい符号ができる。例えば
p
=
0.1
なら情報源事象系は
X
'
=
x
B
x
W
B
x
W
W
B
x
W
W
W
0.1
0.09
0.081
0.729
となる。これをもとにハフマン符号を作ると、
「シンボル」
符号語
B
10
W
B
110
W
W
B
111
W
W
W
0
のようになる。
「シンボル」一つあたりの符号長の平均は
L
‾
=
0.1
×
2
+
(
0.09
+
0.081
)
×
3
+
0.729
×
1
=
1.442
になる。
一方、「1つの「シンボル」の平均の長さ」 は
n
3
=
1
-
(
1
-
p
)
3
p
=
2.71
で、
平均符号長は
L
=
1.442
/
2.71
≒
0.53
となる。もちろんこの値は同じ条件の固定長ランレングス符号の平均符号長 (練習問題1の答え) よりも小さくなる。
練習問題4
練習問題2, 3のように拡張した場合には、
p
=
0.1
ではそれぞれの「シンボル」が出現する確率は以下のようになる。このときのランレングスハフマン符号 (「シンボル」に対する符号語の対応表) を求めよ。
「シンボル」
確率
B
0.1
W
B
0.09
W
W
B
0.081
W
W
W
B
0.0729
W
W
W
W
B
0.06561
W
W
W
W
W
B
0.059049
W
W
W
W
W
W
B
0.0531441
W
W
W
W
W
W
W
0.4782969
※ 木を作るには、一番下の桁までまじめに計算する必要はない。大小関係がわかるレベルまで計算すれば十分。
練習問題5
練習問題4のケースでの「シンボル」一つあたりの符号長の平均
L
‾
を求めよ。ただし、計算結果は四捨五入して
小数第三位まで
にすること (スマホの電卓機能などを使ってよい)。
練習問題6
練習問題4のケースで
p
=
0.1
のときのの平均符号長
L
を求めよ。ただし、計算結果は四捨五入して小数第二位までにすること (スマホの電卓機能などを使ってよい)。