ハフマン符号:頻度で木を組む
出やすい文字を短い符号に ── 「最小2頻度を併合」をステップ実行すると木が下から育ち、平均符号長がエントロピーに迫ります。
各文字の出現頻度(スライダーで偏りを調整。0 にすると除外)
22
12
8
5
残りノード数
—
平均符号長 L
—
エントロピー H(下限)
—
固定長との比較
—
頻度(高いほど出やすい=短くしたい)
ハフマン木(下の葉から併合して育つ。左=0/右=1)
符号表(木が完成すると確定。頻度が高い文字ほど短い)
すべての文字を同じビット数(固定長)で表すのは無駄です ── よく出る文字を短く、めったに出ない文字を長くすれば、全体は縮みます。
ハフマン符号は、これを最適に行う手順です。やることは1つだけ: いま頻度が最小の2つを取り出して足し合わせ、1つの親ノードにまとめる。これをノードが1つ(根)になるまで繰り返します。
すると、頻度の低い文字ほど根から深い葉になり、長い符号が割り当たります。スライダーで頻度の偏りを変え、平均符号長
ハフマン符号は、これを最適に行う手順です。やることは1つだけ: いま頻度が最小の2つを取り出して足し合わせ、1つの親ノードにまとめる。これをノードが1つ(根)になるまで繰り返します。
すると、頻度の低い文字ほど根から深い葉になり、長い符号が割り当たります。スライダーで頻度の偏りを変え、平均符号長
L が理論下限のエントロピー H にどこまで迫るかを見てください。
いま何が起きている?
ここがポイント
- 最小2頻度を併合するだけで、最適な符号長が自動的に決まる(貪欲法)。
- 符号長は頻度が高いほど短くなる(≈ 自己情報量 −log₂ p)── よく出る文字ほど根に近い=短い符号。
- 平均符号長
L = Σ pᵢ ℓᵢは、必ず H ≤ L < H + 1(H はエントロピー)。 - 頻度が偏るほど H が下がり圧縮が効く。均等だと固定長に並び、ほぼ縮まない。