01
偏った頻度 — この手法が本来ねらう場面
わかっていること: ごく少数の記号が文字列を占めています。それらが最短の符号を得て、合計は固定長の符号化をはるかに下回ります。
費用: pi ↑ ⇒ ℓi ↓
計算例: 「mississippi」:11 文字、異なる記号は 4 つ、21 ビットで符号化。8 ビット文字なら 88 ビットなので 76.1 % の節約です
このケースを開く: mississippiインタラクティブな数学・理科レッスン (ノ◕ヮ◕)ノ*:・゚✧
ハフマン符号 — いつ効くのか、そして最適にどこまで近いのか
ハフマン符号は、よく出る記号に短い符号を、まれな記号に長い符号を与えます。各記号に整数ビットを割り当てるという条件のもとでは、これが最良だと証明されています。どれだけ縮むかは、頻度がどれだけ偏っているかだけで決まります。まったく均等なら利用できる偏りはなく、大きく偏っていれば大勝ちします。ただし、限界を決めるのが頻度ではなく整数ビットになる地点までです。
01
わかっていること: ごく少数の記号が文字列を占めています。それらが最短の符号を得て、合計は固定長の符号化をはるかに下回ります。
費用: pi ↑ ⇒ ℓi ↓
計算例: 「mississippi」:11 文字、異なる記号は 4 つ、21 ビットで符号化。8 ビット文字なら 88 ビットなので 76.1 % の節約です
このケースを開く: mississippi02
わかっていること: 平らな分布では、優遇すべき高頻度の記号がありません。ハフマンは固定長の符号にきわめて近いものへと退化します。
費用: pi = 1/n ⇒ ℓ = log₂n
計算例: 「abcdef」:異なる記号 6 つが各 1 回、16 ビットで符号化。6 記号なら素直な 3 ビット符号で 18 ビットです。
このケースを開く: 均一分布03
わかっていること: 繰り返される記号と一度きりの記号が現実的に混ざった場合。これが日常の場面で、結果は情報量の下限のすぐ上に着地します。
費用: H ≤ ℓ < H + 1
計算例: 「hello world」:11 文字、異なる記号 8 つ、32 ビットで符号化。88 ビットに対し 63.6 % の節約で、情報量の下限は 31.3 ビットです
このケースを開く: hello world04
わかっていること: まったく変化のない文字列。情報量は 0 ですが、ハフマンはそれでも 1 記号につき最低 1 ビットを出さねばなりません。1 ビットより短い符号は存在しないからです。
費用: n = 1 ⇒ ℓ = 1
計算例: 「aaaaaaaaaa」:10 文字、異なる記号は 1 つ、10 ビットで符号化。この文字列の情報量は 0 ビットです。
このケースを開く: 単一文字「hello world」をハフマン符号で符号化し、削減量を求めよ。次に、どのような符号であっても達成可能な理論的限界を求めよ。
固定長ASCIIでは、出現頻度にかかわらずすべての文字に同じ8ビットを費やす。ハフマン符号が取り除くのはこの無駄である。すなわち、出現頻度の高い記号には短い符号を、出現頻度の低い記号には長い符号を割り当てる。
符号は出現回数に基づいて構築されるため、まず記号の出現回数を数える。「l」と「o」のみが繰り返し現れ、残りの6文字はそれぞれ1回ずつ出現する。
シャノンエントロピーは、一記号あたりの平均情報量であり、符号長の厳密な下限です。一意復号可能な符号の平均符号長が、これを下回ることはありません。計算に必要な確率は三種類だけです。「l」が3/11、「o」が2/11、残る六文字がそれぞれ1/11なので、総和は (3/11)(1.8745) + (2/11)(2.4594) + (6/11)(3.4594) となります。
文字列の長さを掛けることで、ビット単位での下限が得られる。ハフマン符号の結果は必ずこの値以上になり、一般にこの下限に到達することはできない。エントロピーは整数とは限らないのに対し、符号長は整数のビット数でなければならないからである。
実際の符号長を求めるため、木を組み立てます。ハフマン法では、そのつど重みが最小の二つを併合します。順に 1+1、1+1、1+1、続いて 2+2、2+2、3+4、4+7 です。併合するたびに、その節の下にある各記号の符号長が一ビットずつ増えます。したがって、符号化後の長さは併合した重みの総和 2+2+2+4+4+7+11 = 32 であり、可視化ツールの表示とも一致します。
解答
88ビットから32ビットへ — 63.6%の削減。これらの出現頻度に対するエントロピーの下限は31.3ビットであり、ハフマン符号は32ビットとなった。これは最適値より0.7ビット多く、8つの符号長を整数のビット数に切り上げたことによるものである。保証されているのは H ≤ 平均符号長 < H + 1 という挟み込みの不等式であり、ハフマン符号が記号1つあたり最適値を1ビットを超えて上回ることはない。この1ビットの隙間こそが、算術符号が存在する理由である。
学習の道すじ