例1
のように、すべてのシンボルに対して同じ長さの符号語が割り当たるようにした符号のことを
等長符号という。
等長符号では、あて先側では決められた長さごとに区切って符号語をシンボルに置き換えればよいので、確実にもとのシンボルの並びを再現できる。
(情報源側) abcd → 00011011
(あて先側) 00011011 → 00 01 10 11 → abcd
例2
シンボル | 符号語 |
a | 1 |
b | 01 |
c | 001 |
d | 0001 |
のような符号では、あて先側で「1を受け取ったらそこで区切る」というルールに従ってシンボルに置き換えれば、確実にもとのシンボルの並びを再現できる。
(情報源側) abcd → 1010010001
(あて先側) 1010010001 → 1 01 001 0001 → abcd
このように、シンボルによって符号語の長さが異なる符号のことを
非等長符号という (これはあくまで一例で、非等長符号は他にもいろいろ存在する)。
この非等長符号は一見非効率なように見えるが、abcdの4つのシンボルからなる「文」で
aaaaaaaabaaaaacaaaaaaaaaaaadaaa...
のようにaの出現頻度が極端に高い場合は、ほとんどのシンボルが「1」の1ビットで済むので、符号化された全体のデータ量は例1の場合 (aが2ビットになる) よりも少なくて済む。逆に
ddddddaddddddcccccddddddbdddddd...
のようにdの出現頻度が高いとデータ量は非常に多くなってしまう。
(モールス信号でも、英文で出現頻度の高い e, h などの文字には短い信号、頻度の低い j, q などの文字に長い信号を割り当てることで平均符号長を小さくし、技師が高速で信号を送れるように工夫されていた)