#author("2020-11-09T14:19:35+09:00","default:information-theory","information-theory")
#author("2020-11-09T14:31:55+09:00","default:information-theory","information-theory")
[[InformationTheory]]
* Excel でハフマン符号を生成する(Huffman Coding by Excel Without VBA macro) [#o988edc2]
** 概要 [#q82257bc]
- 文字の羅列により情報を表す場合、その文字や文字の組み合わせにより、出現頻度が異なる場合があります。例えばアルファベット26文字で構成される英文ですが、アルファベットそのものは一文字あたり、-log_2(1/26)=約4.7bit で表すことができます。しかしながら英文になると一文字あたり、約1.3bit の情報量しかありません。これは、英文をアルファベットとは別の記号をうまく当てはめることにより、文の量を約 1.3/4.7 に圧縮できることを表しています。
- このように元の文字を別の記号等に割り当て直すことを符号化と呼びます。
- 一定の通信容量を持つ通信路を有効に使ったり、データ圧縮を行ったりする時、符号化が行われます。
- ハフマン符号は、ハフマン符号の符号列を前から読みながら、後戻りすることなく、元の文字列に複合可能な、「最適な」符号化を行います。JPEGなどの画像の圧縮など、様々な場面で利用されています。
- ここでは、VBAマクロを使わずに、元の符号のセットとそれぞれの出現確率の表から、ハフマン符号の生成の一部(木の生成まで)を半自動的に行う表について説明します。
** ハフマン符号の生成アルゴリズム [#r631c8c9]
- 1. 元の文字(符号)を出現確率の大きなものから降順にならべる。
- 2. 確率の最も小さな文字同士を2つ、つないで2分木を作る。その2分木の出現確率の和を、その、2分木の確率とする。
- 3. 2の2分木を新しい文字系列として、1 に戻る。
- 4. 1-3 を、すべての2分木がつながるまで繰り返す。
- 5. 4 でできた木を根からたどって、枝分かれに0と1を付け、符号を作る。
** ハフマン符号の生成アルゴリズムを実現するExcelシート(VBAマクロなし) [#l83107a2]
- &ref(ハフマン符号/haffman-code-01.png,50%);
*** 説明 [#w6f117c3]
- 入力として、A8:A15 の範囲に元の記号、B8:B15の範囲に、その記号に付ける番号、C8:C15の範囲に、元の記号の出現頻度を記述します。元の記号は8文字限定です。
- 入力が行われると、自動的に、AY8 にハフマン符号を表す2分木が現れます。この2分木は、(0-<0の側の2分木> 1-<1の側の2分木>)で表されています。
** Excel の表 [#ye8e3cd7]
- &ref(ハフマン符号/06-haffman-coding-02.xlsx);

** 参考 [#t7ab60c3]
- https://en.wikipedia.org/wiki/Huffman_coding
- https://www.cs.helsinki.fi/research/aaps/excel/
- ハフマン符号をExcelでやってみる...http://su-hai.hatenablog.com/entry/5804296
----
#counter

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS