ハフマン符号化とは?③(最終回)



さて、前回では
A…「00」
B…「01」
C…「10」
D…「11」
の割り当て規則の下で
「ABADAACB」は「00 01 00 11 00 00 10 01」という
16ビットに置き換えられるけど、
ハフマン符号によって
A…「0」
B…「10」
C…「110」
D…「111」
を割り当てれば、
「ABADAACB」は「0 10 0 111 0 0 110 10」となり
14ビットで表せ、2ビットの削減効果がある事を示した。


同じ内容を表すのであれば、
当然ビット数の少ないほうがハードディスクが有効に使えるし、
非常に良いことなのだが
このハフマン符号は、符号誤り(0や1が反転する事)に非常に弱い。


先の「ABADAACB」を、遠い相手に伝送することを考えよう。
つまり「0(A) 10(B) 0(A) 111(D) 0(A) 0(A) 110(C) 10(D)」を、
インターネットで遠い相手に送ればいいんだけど、
送信している最中に、ノイズがのってしまって
「0 10 0 111 0 0 110 10」と送ったとしよう。(3ビット目が反転)
このとき、受信側の相手は
「0 11 0 111 0 1 110 10」の符号列を
「0(A) 110(C) 111(D) 0(A) 111(D) 110(C) 10(B)」とみなしてしまい
8文字じゃなくて、間違った7文字で受信してしまう。
間違う内容を受信するだけならまだしも、
そもそも割り当てられている文字が存在しない場合もあり得るので
(そうなると、それ以後の復号処理ができなくなる)
このハフマン符号を使う場合は、別途誤り訂正符号を付加するなど
符号誤りに対する対策が求められる。


よって、携帯電話みたいに無線通信では
この「ハフマン符号」は、普通は使われない。
(仮に使われるにしても、かなりの誤り訂正を付加する)
符号誤りやパケットロスに耐性のあるエントロピー符号化法開発って
とても良い研究分野だと個人的には思うんだけどなぁ……。