ハフマン木
ハフマン木を作りたいので勉強中。LHAとZIP―圧縮アルゴリズム×プログラミング入門をもう一度、読もう。
関数言語っぽいアレンジはあとですることにして、とりあえず本の内容をまとめる。
ハフマン符号器
- バッファ中のデータの頻度をカウントする(FrequencyTable)
- ハフマン木を作る
- 教科書通りのやりかたで木を作る
- すべてのノードの根からの深さを調べる
- 深さの分布を調べる
- 16よりも深くにあるノードを探す
- ビット長テーブルを作る
- ビットパターンを割り当てる
- バッファ中のをデータをビットパターンに置きかえる
ハフマン復号器
- ビット長をファイルから読み込む
- ビットパターンを割り当てる
- 入力と一致するビットパターンを探してもとのデータに置きかえる
- 効率をあげるための工夫がなされているので保留