a,b,c,dの4文字から成るメッセージを符号化してビット列にする方法として選択肢1~4の4通りを考えた。
各選択肢はa,b,c,dの各1文字を符号化するときのビット列を表している。
メッセージ中でのa,b,c,dの出現頻度は,それぞれ50%,30%,10%,10%であることが分かっている。
符号化されたビット列から元のメッセージが一意に復号可能であって,ビット列の長さが最も短くなるものはどれか。
正答3
解説
正解は3です。
条件は、一意に復号できることと、平均符号長が最も短いことの2つです。
一意に復号できる符号の代表は、どの符号語も他の符号語の先頭部分(接頭語)にならない接頭符号です。
各案について、まず一意性を確かめ、次に平均符号長を比べます。
【計算】
選択肢3の平均符号長は、0.5×1+0.3×2+0.1×3+0.1×3です。
これを計算すると、0.5+0.6+0.3+0.3=1.7ビットになります。
選択肢4の平均符号長は、全ての符号が2ビットなので2.0ビットです。
【選択肢別解説】
1:× 「00」は「aa」とも「c」とも読めるため、一意に復号できません。
符号長は短くても、条件を満たしません。
2:× 「010」は「ba」とも「ac」とも読めるため、一意に復号できません。
bの符号01の先頭が、aの符号0と重なっていることが原因です。
3:○ 0、10、110、111はどれも他の符号語の接頭語になっていないので、一意に復号できます。
平均符号長は1.7ビットで、一意に復号できる案の中で最短です。
4:× 全て2ビットの固定長なので一意に復号できますが、平均符号長は2.0ビットです。
選択肢3の1.7ビットより長くなります。
【ポイント】
出現頻度の高い文字に短い符号を割り当てる方法を、ハフマン符号化といいます。
本問の頻度でハフマン符号を作ると、a、b、c、dの符号長は1、2、3、3ビットになり、選択肢3と同じ長さになります。