ハフマン コードを使用してテキストを圧縮することを考えていますが、可変長(文字列) のシンボルを使用します。例 (アンダースコアをスペースとして使用):
huffman-code | symbol
------------------------------------
00 | _
01 | E
100 | THE
101 | A
1100 | UP
1101 | DOWN
11100 | .
11101 |
1111...
(etc...)
頻度表を作成するにはどうすればよいですか? 重複する問題がいくつかあることは明らかです。シーケンス_TH
は とほぼ同じ頻度で表示されTHE
ますが、表では役に立ちません ( と の両方_
にTHE
短いハフマン コードがあります)。
そのようなアルゴリズムは存在しますか?特別な名前はありますか?頻度表を生成するためのトリックは何ですか? 入力をトークン化する必要がありますか? 文献/ウェブには何も見つかりませんでした。(これはすべて、基数ツリーについても考えさせます)。
私は反復プロセスを使用することを考えていました:
- 長さが 1 ~ N のすべてのシンボルのハフマン ツリーを生成する
- N>1 で特定のカウントしきい値を下回るすべてのシンボルをツリーから削除します
- 2 番目のハフマン ツリーを再生成しますが、今回は前のハフマン ツリーで入力をトークン化します (おそらくルックアップに基数ツリーを使用します)。
- 収束するまで(または数回)1まで繰り返します
_TH
しかし、これでオーバーラップ( vs )の問題をどのように防ぐことができるかわかりませんTHE
。