>>874 >>875

>>875 の例だと、元データにおけるそれぞれのキャラクタの出現頻度は、
a > b > d > d ≒ e ≒ f > g ≒ h
なんだろう、おそらく。 そこで ・・・

出現頻度の高い順に、まず 'a' の1ビット目に独占的に0を割り当て、それ以外の
キャラクタの1ビット目には1を割り当てる。
次に頻度の高い 'b' に、2ビット目として0を割り当て ( 従って 10 )、それ以外の
キャラクタには2ビット目として1を割り当てる ( 同 11 )。
同様に 'c' の3ビット目に0 ( 同 110 ) それ以外には1 ( 同 111 )。
さて、この次は 'd' 'e' 'f' の出現頻度がほぼ等しいので同じ符号長を割り当てたい。
そこで、この3キャラおよびそれ以外を区別するため2ビットを割り当て ( 2ビットあれば
4種を区別できるから )、'd' の4ビット目と5ビット目に 00 ( 同 11100 )、
'e' には 01 ( 同 11101 )、'f' には 10 ( 同 11110 )、そしてそれ以外には
11 ( 同 11111 )。
その次の 'g' と 'h' も出現頻度がほぼ等しいから、同じ符号長を割り当てる。 もし、
'h' 以外にさらに出現頻度の低い他のキャラクタがあるならば、ここでは 'g' 'h'
「 それ以外 」 の3種 を表現可能な2ビットを割り当てるところだが、元データの
キャラクタバターンは、'a' 〜 'h' の8種だけなのだろう。 そこで、'g' 'h' だけを
区別できれば良いから1ビットを割り当て、'g' の6ビット目に 0 ( 同 111110 )、
'h' には 1 ( 同 111111 )。

これで出現頻度が多い順に少ない符号を割り当てることができ、かつ、符号化ビット列を
先頭から順方向に解釈するだけで、すべてのキャラクタを判別することができる。

こんなルール。

>>877 これでいいか?