データ構造 - ハフマン符号化とハフマン木

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/starter_____/article/details/90692568

基本コンセプト

n個のリーフノードで構成され、最適なバイナリハフマンツリーと呼ばれるすべてのバイナリ加重経路長、最短二分木を重み付けWPL。

  • パスは:他の配列との間の接続ノードから分岐を指します。

  • 経路長は:経過別のブランチ・ノードへの1つのノードから番号を指します。

  • ツリーパスの長さ:木とパスの長さのすべてのリーフノード。

  • 右:木の各ノードには、いくつかの本当の意味での実数を与え、私たちは本当の数は右のノードであると言います。

  • 加重パスの長さ:ツリー構造では、ルートノードからノードへの経路長に対する当社の権利の製品は、ノードの重み付き経路長と呼ばれています。

  • 加重ツリーパスの長さ:パスの長さとツリーノードのすべての葉の加重和。

ここに画像を挿入説明
示されるように、葉の重量は、それぞれ、B、C、Dを、ノード7,5,2,4、ルートノードへ分岐の数が2の、経路長であるため、Aは加重経路長5 * = 10 2、3 = 6.4×2 = 8 * 2、ように経路長加重バイナリツリーが= 14 + 10 + 6 + 8 = 38であり、WPL


ハフマン木のコンストラクタ

Nの重みが与えられると、n個のハフマンツリーを持つ重みは次のようにアルゴリズムが記載されて構成されています。

(1)これらのn個の重み値は、ルートノードとしてのみNバイナリツリー、Fと呼ばれるセットのバイナリツリー構成みなされます

(2)森林F、左、右の部分木のような新しいバイナリツリー内のバイナリツリーの2つのルートの最小量を選択し、ルートノードは、左と右のサブツリーの新しいバイナリツリーのルートの重みをマークする権利でありますそして、値。

新たに形成された二分木が森Fに添加しながら、(3)、その2つのバイナリツリーにFから選択項目の削除

(4)繰り返し(2)、(3)操作、森林だけバイナリが含まれている日まで、この時点で得られた二分木は、ハフマン木です。


ハフマン木の構成例

ここに画像を挿入説明

(A)は、二分木4の唯一のルートであるように、4つのノードA、B、C、D、それぞれ、7,5,2,4重量所与

(B)は、2つの最小根の正しい値、2及び4 2のルート探索のすなわち右側の値が表示されます。原2及び4削除、新しい重みが6を添加しながら新しいバイナリツリーの構築、根重量は4 + 2 = 6、右の値であります

(C)右側2つの値のルートノード5,6が現れるの重量を有する2つ、すなわち、最小のルートを検索します。新しいバイナリツリー、根重の構造は、図5及び図6を削除する権限の元の値が、新しい重み11の添加6 + 5 = 11でした

(D)右の二つの値2の最小ルートのルートノードは、7と11のすなわち右側の値が検索するように見えます。新しいバイナリツリーの構造は、根重量は、右7及び11の元の値を削除しながら、新たな重量18 Fセットでのみ次のツリーを加え、11 + 7 = 18でありますハフマン木を得ます。

注:ノードの同じセットについて、ハフマンツリー構造は、例えば、一意ではないかもしれない:3,2,2,2の4つのノードのA、B、C、Dの重み場合、それぞれ、選択されました最小重量接合ようなBおよびC又はB及びDのような2つの異なるオプションがあります


ハフマン符号化

ハフマン符号化は、ハフマン木に基づいて構築され、このアプローチの最大の利点は、少なくとも文字最も有益なコンテンツでエンコードされています。各文字、ハフマン木の確立の重量と同じテキストの文字数をカウントすることで、送信された情報の内容によります。

  • プレフィックスエンコーディング:エンコーディングは、他の任意のエンコーディングの接頭辞することはできません
  • その左側の子の統一規定における各サブツリーの右の子0、1マークをラベル。
  • ノードを介してタグを記述するためには、ルートノードハフマン木から起動する場合に、使用する文字、最終的な結果は、ハフマン符号化ノードがあります。
  • ハフマンツリーに反映表示されるテキスト文字のより多くの数は、根に近いです。短い長さコーディング。

ここに画像を挿入説明

示されるように、使用される文字の最大数は、文字Bが続きます。ハフマン符号化では文字110は、文字コード111 Dとしてエンコード文字0、文字エンコーディング10 B、C、です。


Nハフマン木

以下の三元ツリーハフマン例
ここに画像を挿入説明
(1)配列を直接構成することができない三叉ハフマンツリーノードが追加何か正しい値0時間を必要とします
ここに画像を挿入説明

(2)上記ハフマンバイナリツリーノード選択マージをモデルにし、最終的に与えます

ここに画像を挿入説明

おすすめ

転載: blog.csdn.net/starter_____/article/details/90692568