SICPを読む(78) 問題2.67 ハフマン符号化木

ハフマン木に入ります。JPEGやらLHAでも使われてるアルゴリズムだそうです。

前回の二進木と違ってツリーのデータ型が二つに増えたという所が重要なポイント。

ハフマン符号化木

ハフマンさん頭良すぎ。

ハフマン符号 - Wikipedia

ハフマン符号化木のポイントは、ツリーを二進数に写像してる点。

0なら左へ。1なら右へ。

つまり、1 1 1 0は、ツリーの右、右、右、左にあるデータを取ってこい。という命令になる。SICPの図で、指折り数えるとわかりやすい。

問題 2.67

復号編。ハフマン符号化木と二進数列から、元の文字に戻すと何になるかという問題。ちゃんと出来たか確認するだけだったり。

(decode '(0 1 1 0 0 1 0 1 0 1 1 1 0) data)
; (A D A B B C A)

この動きは激しく面白いっす。

ツリーの構造が違うと返ってくる値も違う。つまり、0 1 1 0 ...を見ただけでは何処に区切りがあるのかわからない。


問題は木をどうやって作るのか。次が楽しみ。