エンコード | デコード | 圧縮

> shannon | fano | entropy <

// Shannon-Fano – データ圧縮のためのトップダウン型エントロピー符号化

[ENTROPY]

エントロピーに基づく

情報理論に基づき、効率的な可変長符号を生成します。

[TOP-DOWN]

トップダウン方式

類似した確率をもつ記号のグループに再帰的に分割します。

[HISTORIC]

歴史的アルゴリズム

現代の多くの圧縮アルゴリズムに影響を与えた先駆的手法です。

>> 技術情報

Shannon-Fano の仕組み:

Shannon-Fano 符号化では、記号を出現頻度順に並べ、合計確率ができるだけ近くなるように2つのグループへ再帰的に分割します。各分割でコードに 1 ビットを追加します(左側に 0、右側に 1)。その結果、可変長のプレフィックス符号列が得られます。

符号化プロセス:

テキスト: "AAABBCD" 出現回数: A:3, B:2, C:1, D:1 分割: [A] | [B,C,D] コード: A: 0 B: 10 C: 110 D: 111 符号化結果: 0 0 0 10 10 110 111

Shannon-Fano を使う理由:

  • >実装が簡単
  • >良好な圧縮率
  • >歴史的に重要
  • >教育用途に最適
  • >プレフィックス符号を生成

>> よくある質問

Shannon-Fano 符号化とは?

Shannon-Fano 符号化は、1940年代に Claude Shannon と Robert Fano によって開発されたエントロピー符号化方式です。記号の出現確率に基づく可変長符号を用いた、最初期のアルゴリズムの一つです。

Shannon-Fano と Huffman の違いは?

どちらも可変長符号を生成しますが、Huffman 符号は最適であり、平均コード長を最小化します。Shannon-Fano はよりシンプルですが、やや長い符号になることがあります。Huffman はボトムアップで木を構築し、Shannon-Fano はトップダウンで構築します。

分割処理はどのように行われますか?

記号を頻度順に並べ、合計確率がほぼ等しくなるように2つのグループに分けます。この処理を各グループに対して再帰的に繰り返し、最終的に各グループに1つの記号だけが残るまで続けます。

現在でも Shannon-Fano は使われていますか?

Shannon-Fano は実用システムでは、最適性を保証する Huffman 符号化にほぼ置き換えられています。現在は主に歴史的・教育的な目的で利用されますが、圧縮アルゴリズムの基本概念を理解するうえで非常に有用です。

// 計算例

SymbolFreqCodeBits
A15002
B7012
C6102
D61103
E51113

// コード例

Frequencies  A=15 B=7 C=6 D=6 E=5      (39 symbols)
1. Sort symbols by frequency (descending).
2. Split the list where the two halves' totals are closest:
   {A,B}=22  |  {C,D,E}=17     -> first bit 0 / 1
3. Recurse on each half until single symbols remain:
   {A}|{B} -> 00, 01      {C}|{D,E} -> 10, 11..   then {D}|{E} -> 110, 111
Total   15*2 + 7*2 + 6*2 + 6*3 + 5*3 = 89 bits
Huffman on the same data: A=1 bit, others 3 bits -> 87 bits

>> その他の質問

Q: Shannon-FanoとHuffmanの違いは?

A: Shannon-Fanoは整列した記号列を上から下へ、頻度の合計がなるべく等しい2つに分割します。Huffmanは最も稀な記号を併合して下から木を作ります。Huffmanは最適であることが証明されていますが、Shannon-Fanoは常にそうとは限りません。

Q: Shannon-Fanoは常に最適ですか?

A: いいえ。例ではHuffmanの87ビットに対し89ビットです。どちらも語頭条件を満たしますが、Shannon-Fanoの分割規則は不利な分け方を選ぶことがあります。

Q: Shannon-Fanoはどこで使われますか?

A: 主に歴史的・教育的な手法です(Claude ShannonとRobert Fano、1948/49年)。ZIPのIMPLODEアルゴリズムに変種があり、現代の圧縮器はHuffmanや算術符号を使います。

その他の言語