ハフマン符号化ビジュアライザー

テキストを入力すると、ハフマン符号化が頻出文字に短い符号を割り当てる様子がわかります。

インタラクティブシミュレーションを読み込んでいます...

Optimal Prefix-Free Entropy Encoding 🖖

Huffman encoding optimizes data compression by dynamically constructing a binary tree based on the statistical frequency of input symbols. It assigns mathematically shorter bit sequences to highly probable characters, achieving the theoretical limit of Shannon entropy. The strict requirement of prefix-free codes guarantees unambiguous algorithmic decoding. This deterministic reallocation of binary weight mathematically minimizes the total file size without any loss of data.

常に最も稀な二つを併合して作る 🖖

木は下から上へ組み立てられます。まず各文字を出現頻度順に並べ、次に最も頻度の低い二つの要素を小さな部分木にまとめ、一つの束として扱う操作を繰り返します。木が一つになるまで続け、最後に頂点から下りながら符号を読み取ります。左が 0、右が 1 です。常に最小の二つを結ぶこの「貪欲な」やり方は近視眼的に見えますが、証明上もっとも短い符号を生み出します。

指導教授を超えた学期レポート 🖖

デイヴィッド・ハフマンは1951年、MITの大学院生だったときにこれを考案しました。ロバート・ファノ教授が、期末試験か「最も効率的な符号を見つける」レポートかを学生に選ばせたのです。ファノとクロード・シャノンはすでに挑戦し、木を上から下へ構築していました。ハフマンは諦めかけましたが、下から上へ――最も稀な記号から併合する――のが最適だと気づき、自分の教授の方法を上回りました。

例題

  • hello world - "hello world" → 約30%の節約
  • mississippi - "mississippi" — 冗長性が高い
  • 均一分布 - "abcdef" — 分布が均一で、節約効果はわずか
  • 単一文字 - "aaaaaaaaaa" — 単一シンボルの自明なケース