> huffman | 最適な | 符号 <
// Huffman 符号化 - プレフィックスフリーで最適な圧縮アルゴリズム
>> 特長
最適な符号
与えられた頻度に対して、平均符号長が最短となる符号を生成します。
プレフィックスフリー
どの符号も他の符号の前方一致にならないため、曖昧さなく復号できます。
頻度ベース
よく現れる文字ほど短い符号になり、自動的に効率の良い圧縮が行われます。
>> 技術情報
Huffman 符号化の仕組み
Huffman 符号化は、文字の出現頻度から二分木を下から上へ構築します。もっとも頻度の低い 2 つのノードを繰り返し親ノードとして結合し、最終的に 1 つの根ノードだけが残るまで続けます。左の枝を '0'、右の枝を '1' とし、頻度の高い文字ほど根に近い位置に配置されるため、より短い符号を得られます。これにより、与えられた頻度分布に対して最適な圧縮率が実現されます。
Huffman 符号化の例
Text: "AABBBCCCC"
Frequencies:
A: 2
B: 3
C: 4
Tree Building:
1. Combine A(2) + B(3) = AB(5)
2. Combine C(4) + AB(5) = Root(9)
Tree:
Root(9)
/ \
C(4) AB(5)
/ \
A(2) B(3)
Codes:
C: 0
A: 10
B: 11
Encoded: 10 10 11 11 11 0 0 0 0
= 1010111111 0000
Huffman 符号化を使う理由
- 理論的限界に近い圧縮率
- 実装が比較的シンプル
- ZIP / JPEG など多くのフォーマットの基盤技術
- 可逆圧縮でデータ損失なし
- 実運用で実証された高い効率
>> よくある質問
Huffman 符号化とは何ですか?
Huffman 符号化は、1952 年に David A. Huffman によって提案された最適なプレフィックスフリー圧縮アルゴリズムです。文字の出現頻度に応じて可変長のビット列を割り当て、頻度の高い文字には短い符号を与えることで、平均符号長を最小化します.
なぜプレフィックスフリーと呼ばれるのですか?
ある符号が別の符号の先頭部分(プレフィックス)になっていないとき、その符号体系はプレフィックスフリーと呼ばれます。例えば 'A' の符号が '01' であれば、他のどの文字の符号も '01' で始まってはいけません。この性質により、区切り記号を挟まなくても、ビット列を左から順に読むだけで一意に復号できます。
Huffman 符号化の効率はどのくらいですか?
Huffman 符号化は、与えられた頻度分布に対して理論上のエントロピー限界から 1 ビット以内の圧縮率を達成できるとされています。英語テキストでは、一般的に 60〜70% 程度の圧縮が期待でき、文字の出現頻度に偏りがあるほど効果が高くなります。
Huffman 符号化はどこで使われていますか?
Huffman 符号化は JPEG 画像圧縮、ZIP ファイル圧縮(DEFLATE における LZ77 との組み合わせ)、MP3 オーディオなど、多くのフォーマットで利用されています。多くの場合、他のアルゴリズムと組み合わせて使われ、例えば JPEG では DCT と量子化の後に Huffman を適用し、ZIP では LZ77 の後段で Huffman を使用します。