2012-02-08 4 views
1

ハフマンのデコーダの仕組みをよく理解しようとしています。 Iveはコードテーブルを手に入れましたが、バイナリ文字列のあいまいさのためにデコーダがどのように動作するかを理解するのに苦労しました。ハフマンの圧縮が悪いのですか?

(イムユニで私の最後の年のために準備してこれを学習)

私のテーブル:

Data Hcode 
0,  0 
1,  1 
2,  10 
3,  11 
17, 100 
18, 101 
19, 110 
29, 111 

私は010011のようなハフマン符号列を持っている場合、私はどのようにデータの多くの異なる組み合わせを返すことができます。私は差別することができますか?

私はBST表現のハフマンロジックを理解していて、そのパスが(0-255(ascii))の間のその与えられた値のコードに似ている葉へのパスをたどりますが、私はまだ区別できないデータを返す:0,1,0またはデータ:0,17

私は本当にデータ0と1に2ビットコードを適用する必要がありますか? (00と01)

私は場合、私はあなたが私がテーブルを生成したか疑問

をXDできIVEは最高の説明を願って - 私はそれを生成するために使用ツリーロジックをdidntのため、あなたのつもりが、私を殺します。私は周波数でデータ(ランダムバイト)をソートしましたが、私は要素の位置番号をバイナリに変換することでHcodesを生成しました(なぜこのポストMoor Huffmanと呼んでいますか?

多くのアドバイスありがとうございます。

答えて

3

コードテーブルが間違っています。ハフマン・オデスはprefix freeとされています。これはあとであいまいさなくデコードするために必要です。

コードを作成するためにバイナリツリーを使用すると、自動的に "接頭辞フリーネス"が保証されます。参照:http://en.wikipedia.org/wiki/Huffman_coding

そして今、私はあなたを殺すつもりです...;)

2

だけでなく、コード表が間違っている、コードの長さも間違っています。 2つの1ビットコードがある場合は、既にすべてのコードスペースを使い切っており、他のコードは使用できません。あなたが示したのは、ハフマンコードではなく接頭辞コードでもなく、実際にはコードではありません。

関連する問題