機械学習理論研究室 ← AI体験の一覧

どこまで縮むか

写真やレポートをzipで固めると、ファイルが小さくなります。何をすると小さくなるのか、そして、どこまで小さくできるのか。その仕組みを自分の手で組み立てます。

同じ文字ばかりの15文字を送る

友だちに、この15文字をそのまま送りたいとします。

コンピュータは0と1しか送れません。出てくる文字は4種類なので、1文字を2ビット(0か1を2つ並べたもの)で表せば足ります。A=00、B=01、C=10、D=11と決めれば、15文字で30ビットです。

でも、Aは8回も出てきます。Dは1回だけです。同じ長さを割り当てるのは、もったいない気がしませんか。

まず、何回出てくるかを数える

これが全部の出発点です
よく出る文字ほど短く、めったに出ない文字ほど長く。そう割り当てれば、全体は短くなります。この考え方は1830年代に作られたモールス信号にもありました。英語でいちばん多いEは「・」1つ、めったに使わないQは「--・-」の4つです。

木を下から組み上げる

できあがった木です

では、どう割り当てれば一番短くなるのでしょうか。1952年にハフマンが見つけた手順は、拍子抜けするほど単純です。いま残っている中でいちばん少ない2つを選んで、1つに束ねる。これをくり返すだけです。

完成

束ねるたびに、その2つの上に新しい節ができます。枝の左へ行くと0、右へ行くと1です。

できた木から符号を読み取る

木のてっぺんから文字までたどって、左の枝で0、右の枝で1と書き取ります。これがその文字の符号語(0と1の列)です。

文字出た回数符号語符号長使うビット

8回出てくるAはたった1ビット。1回しか出ないDは3ビット。よく出る文字ほど短くなっています。

工夫なし(2ビット×15文字)30
ハフマン符号25
圧縮率83%

30ビットが25ビットになりました。順番を入れ替えたわけでも、文字を捨てたわけでもありません。割り当てる長さを変えただけで、元どおりに戻せるまま短くなります。