各種符号の作り方復習(詳細解説)

1. ハフマン符号の作り方

ハフマン符号は、情報源の各記号の出現確率に基づいて最適なプレフィックス符号を作る手法です。

【具体例1】情報源 $S=\{A,B,C\}$, $P(A)=0.5$, $P(B)=0.3$, $P(C)=0.2$ の場合

A B C 0.5 1.0 0 1 1
符号語: A:0, B:10, C:11
符号化例: S = ABAC → 0 10 0 11

【具体例2】符号語が長くなる場合(4記号・確率が小さい記号)

A B D C 0.4 1.0 0 1 1 1
例: S = \{A,B,C,D\}, P(A)=0.2, P(B)=0.2, P(C)=0.4, P(D)=0.2
符号語: A:00, B:01, C:10, D:11
符号化例: S = DAB → 11 00 01(Dが最長)
ポイント: 確率が小さい記号ほど符号語が長くなる。記号数が増えるほど、最長符号語の長さも増加。

2. 算術符号の作り方

算術符号は、記号列全体を区間 [0,1) の中の1つの値で表現する手法です。

【具体例】情報源 $S=\{A,B,C\}$, $P(A)=0.5$, $P(B)=0.3$, $P(C)=0.2$ の場合

区間分割:
A: [0, 0.5), B: [0.5, 0.8), C: [0.8, 1)
符号化例: S = ABAC の場合
1. 最初A → [0,0.5)
2. 次B → [0,0.5)の中をBの確率で分割 → [0.25,0.4)
3. 次A → [0.25,0.4)の中をAの確率で分割 → [0.25,0.325)
4. 次C → [0.25,0.325)の中をCの確率で分割 → [0.31,0.325)
最終区間: [0.31, 0.325) の任意の値(例:0.32)を符号語とする。
ポイント: 小数確率でも理論限界に近い平均符号長が得られる。

3. ランレングス符号の作り方

ランレングス符号は、連続する同じ記号の回数をまとめて符号化する手法です。

【具体例】情報源 $S=\{A,B,C\}$ の場合

符号化例: S = AAABBBCCAA → (A,3), (B,3), (C,2), (A,2)
符号語: 各ペアをバイナリや可変長符号で表現。
ポイント: 繰り返しの多いデータで特に有効。画像圧縮やFAXなどで利用される。

4. LZ符号(辞書型符号)の作り方

LZ符号は、既出のパターンを辞書に登録し、繰り返し部分を効率的に符号化する手法です。

【具体例】情報源 $S=\{A,B,C\}$ の場合

符号化例: S = ABABACAB
1. (0,A) → 辞書にA追加
2. (0,B) → 辞書にB追加
3. (1,A) → AB(辞書1番目+A)追加
4. (2,C) → BA+C追加
5. (3,A) → AB+A追加
符号語: (0,A),(0,B),(1,A),(2,C),(3,A)
ポイント: テキストやバイナリデータの圧縮で広く使われる。ZIPやPNGの基礎技術。

5. 拡大情報源記号の符号化

拡大情報源記号は、複数記号をまとめて新しい記号集合を作り、最適符号化を行う手法です。

【具体例】情報源 $S=\{A,B,C\}$ の2記号拡大

拡大記号集合: AA, AB, AC, BA, BB, BC, CA, CB, CC
符号化例: S = ABAC → AB, AC
符号語: 拡大記号集合にハフマン符号などを適用して符号語を割り当てる。
ポイント: 拡大するほど平均符号長がエントロピーに近づく。マルコフ情報源など依存関係のある場合にも有効。

6. 線形符号・ハミング符号の作り方

線形符号・ハミング符号は、生成行列や検査行列を使って誤り検出・訂正ができる符号です。

【具体例】情報源 $S=\{A,B,C\}$ を2ビットで表現し、ハミング(7,4)符号で符号化

情報ブロック: 例:A=00, B=01, C=10
生成行列 $G$: $G = \begin{pmatrix}1&0&0&0&1&1&0\\0&1&0&0&1&0&1\\0&0&1&0&0&1&1\\0&0&0&1&1&1&1\end{pmatrix}$
符号語: $w = uG$
例:A(00) → $w = 0000000$, B(01) → $w = 0101011$, C(10) → $w = 1001101$
誤り検出: 受信語 $y$ に対し $s = yH^T$ を計算。$s$ から誤り位置を特定し訂正。
ポイント: 通信路の誤り検出・訂正に不可欠。生成行列・検査行列の設計が重要。