復号可能    Decodability

 符号(1)

および、

符号(2)

は次のような特長をもっています。

どの符号語も他の符号語の接頭語になっていない

たとえば、符号(2)では、“”は“10”や“110”や“111”の接頭語になっていないし、“10”は“”や“110”や“111”の接頭語になっていません。 このような特長をもっていると、アルファベットの符号の最終ビットを読んだ時点で瞬時的に(遅れなしに)復号できます。

たとえば、符号(2)で符号化されたデータ

を受けたとします。 これを左から順番に読んで、復号してみましよう。

    1. 最初のビット“”を読む・・・・・・・・・でない。B、C、Dのいずれかである
    2. 2ビット目を追加して“10”を読む・・・・C、Dは“10”で始まらないからである
    3. 3ビット目の“”を読む・・・・・・・・・でない。B、C、Dのいずれかである
    4. 4ビット目を追加して“11”を読む・・・・である
    5. 5ビット目を追加して“111”を読む・・・である
    6. 6ビット目の“”を読む・・・・・・・・・B、C、Dは“”で始まらないからである
    7. (以下同様)

このようにして、符号語の終わりのビットを読んだ時点で、もとのアルファベットが確定します。この条件を瞬時復号可能といいます。

どの符号語も他の符号語の接頭語でないとき、瞬時復号可能です

瞬時復号可能ではないが、復号できる符号はいくらでもあります。

符号(3)

この符号は接頭語の条件を満たしていないので、瞬時復号可能ではありません。 実際、2文字“AC”を符号化したデータ“0011”は、最初の“”を読んだとき、まだ”A”を確定できません。 2番目のビット“”、すなわち“”の符号語の先頭ビットを読んで始めて””が確定できます。 この符号の特長は、“”が符号語の先頭を示していることです。 したがって、“”を読んだら、その前のビットパターンがどの符号語に一致するかを調べれば一意に復号することができます。 なお、この符号語を逆にすると、

符号(4)

となり、これは瞬時復号可能になります。 したがって、符号(3)で符号化されたデータを逆順に読めば瞬時復号可能になります。 ちなみに、符号(3)を下のようにちょっと変更してみます。

符号(5)

この場合、“BA”と“”がともに“011”なので、復号不可になってしまいます。

一般に、非瞬時のとき、その復号可能性を判定するのはやっかいです。 一方、瞬時復号可能な符号ならば、必ず木グラフの先端に符号が割り付けられているので、すぐに判定できます。 実用の場面で、非瞬時復号可能な符号をわざわざ使う必要性はなさそうです。 しかも、

 ハフマン符号は瞬時復号可能であって、最良の効率をもつ(コンパクトである)。

ことがわかっていますから、ことさら非瞬時を扱う意味はありません。 加えて、復号可能な符号における平均符号長とエントロピーの関係に関しても、瞬時復号可能の範囲では理解が容易ですが、非瞬時まで広げると大変難しくなります。