ハフマンツリーとハフマン符号化の構築方法

知識のポイント:

重みが小さいノードは、重みが大きいノードの左側にあります

左側のインデックスのルートノードの値は、右側のインデックスのルートノードの値よりも小さくする必要があります

ハフマン符号化と復号化はどちらもユニークです

ハフマンツリーを使用したプレフィックスエンコーディングのデコード:
任意の1つの文字のエンコーディングが、同じ文字セット内の別の文字のエンコーディングのプレフィックスではないことを意味します。
ハフマン符号化はプレフィックスコードの一種です。

デコードプロセスは、エンコードプロセスの逆です。

ハフマンツリーのルートから開始して、バイナリコードの各ビットは左から右に識別されます。

0に遭遇した場合は、左側のブランチを選択して次のノードに移動します。

1に遭遇した場合は、右のブランチを選択して、リーフノードに到達するまで次のノードに移動します。その後、対応する文字が取得されます。
 

質問1:

情報通信連絡先では、a、b、c、d、e、f、g、hの8文字が使用されており、各文字の使用頻度は6、30、8、9、15であることが知られています。 24、4、12、各文字のハフマン符号化を設計してみてください

問題解決のアイデア:

(1)各文字のハフマン符号化を設計してみてください。

最初にタイトルに記載されている数字を見てみましょう。通常、小さい数字を下部と左側に配置します。

最初の4と6は10を構成します

次に、次に小さい数と最小の数、次に8と9を見つけて、二分木を形成します。ルートは17です。

残りの数の中で最小の数と次に小さい数を見つけます。これは12、12、最小の数10で22を形成します。

最小数と2番目に小さい数である15を見つけます。最小数は左側にあるため、12と17の間に配置する必要があり、15と17は32を形成します。

次に、最小および2番目に小さい数を見つけます。これは、46から24、24、および22です。

 現在、割り当てられていないのは30だけなので、30と32が62を構成します。

 これは一目でわかるので、46と62が108を形成し、このハフマンツリーが出てきます

(2)aabcffh用にエンコードしてください 

以下の数字に対応する文字を書いてください

 では、ハフマン符号化はどうですか?最初に01を書き込みます。覚えておいてください。左側のブランチは0、右側のブランチは1です。

次に、上の図から、ハフマン符号化は次のようになっていることがわかります。

a:0001 b:10 c:1110 d:1111 e:110 f:01 g:0000 h:001

したがって、aabcffhは次のようにエンコードされます。00010001 10 1110 01 01 001

(3)次のコードを翻訳してください。

00011111110010010000 -----------------> adefhg
000100011011100101001 ------------------> aabcffh

戦時中に送信された秘密のメッセージなど、デコードで見つかった文字列は一意である必要があります

たとえば、反撃は明日だと言われますが、あなたが言い換えると、明日は反撃することも、明日は撤退することもできるので、それは大きな問題ではありませんか?

質問2: 

通信メッセージで使用される文字セットが{a、b、c、d、e、f}であるとすると、メッセージ内の各文字の頻度は次のようになります。

0.34、0.05、0.12、0.23、0.08、0.18、これらの6文字のハフマン符号化を設計してみてください。

(1)構築されたハフマンツリーを描画してください(ツリー内の左側の子ノードの重みは、右側の子ノードの重みよりも小さい必要があります)

回答:問題を解決するという考え方は前の考え方と同じです。まず、数字の中で最小のものと2番目に小さいものを見つけましょう。

まず、0.05と0.08は0.13を形成します

次に、最小の小数と2番目の小数(0.12と0.13)を見つけて、0.25を形成します。

次に、残りの数値である0.18と0.23の中から、最小で次に小さいものを見つけます。

次に、0.34、0.41、および0.25は未割り当てのままであるため、0.34および0.25は0.59を形成します。

 次に、0.41と0.59が残っていますが、0.41は0.59よりも小さいため、0.59の左側にあります。

(2)各文字に対応するコードを個別に記述します(左の分岐は文字「0」を表し、右の分岐は文字「1」を表す必要があります)

 

a:11 b:11010 c:100 d:01 e:1011 f:00 

 

おすすめ

転載: blog.csdn.net/rej177/article/details/124065594