ツリーを作成したら、道路の各分岐点にある2つのブランチに0と1を割り当てる方法を任意に選択できます。したがって、その割り当てを正規にする方法がなければ、各シンボルにビットを割り当てる方法に対する「正しい答え」はありません。たとえば、それはであるr
必要があります011
。 r
任意の3ビット値にすることができます。(ただし、この周波数セットの長さは3ビットである必要があります。)
重要なのは、デコーダーがエンコーダーと同じ0と1の割り当てを取得することです。コードを直接送信することも、長さを送信して正規の方法で0と1を割り当てることもできます。例として、zip、gzip、pngなどで使用される圧縮アルゴリズムは、各シンボルのビット数のみを送信します。次に、最小の長さから始めて、その長さのすべてのシンボルに0から始まるコードが割り当てられます。シンボルには、表現整数でソートされたシンボルの順にコードが割り当てられます。例:ASCIIでソートされた文字の順序。次の長さでは、右側にビットが追加され、コードのカウントが続行されます。これにより、左から右にデコードする適切なプレフィックスコードが保証されます。
したがって、この場合、コードの長さは次のようになります。
2: _
3: a, e, r
4: d, f, n
5: b, h, t
6: i, k, o, s, u, v
したがって、次のようになります(各長さ内にアルファベット順に記号が表示されます)。
_: 00
a: 010
e: 011
r: 100
d: 1010
f: 1011
n: 1100
b: 11010
h: 11011
t: 11100
i: 111010
k: 111011
o: 111100
s: 111101
u: 111110
v: 111111
ここでのビット割り当ては、3つのシンボルのうちの2つについての本の内容とは異なります。他の完全に適切な正規プレフィックスコードの選択の例として、すべてのビットを反転することも、ビットの列のサブセットを反転することもできます。たとえば、最初の列全体を反転できます。各長さの記号の順序を変更できます。ビットの順序を逆にすることができます。実際、zipなどは上記のビットを逆の順序で格納するため、デコードは最下位ビットから最初に、つまり右から左に実行されます。