哈夫曼

哈夫曼


 

1、最優樹的定義:

  結點的路徑長度定義爲:從根結點到該結點的路徑上分支的數目。
  樹的路徑長度定義爲:樹中每一個結點的路徑長度之和。
  樹的帶權路徑長度定義爲:樹中全部葉子結點的帶權路徑長度之和
  WPL(T) = (對全部葉子結點)
  在全部含有n個葉子結點、並帶有相同權值的m叉樹中,必存在一棵其帶權路徑長度取最小值的樹,稱爲最優樹。算法


 

2、如何構造最優樹:

哈夫曼算法,以二叉樹爲例:
(1)根據給定的n個權值{W1,W2,W3...Wn},構造n棵二叉樹的集合F={T1,T2...Tn},
其中每棵二叉樹中均只含一個帶權值爲Wi的根結點,其左、右樹爲空樹。
(2)在F中選取其根結點的權值爲最小的兩棵二叉樹,分別做爲左、右子樹構造
一棵新的二叉樹,並置這棵新的二叉樹根結點的權值爲其左、右子樹根結點的權值之和。
(3)從F中刪去這兩棵樹,同時加入剛生成的新樹。
(4)重複(2)和(3)兩步,直至F中只含一棵樹爲止。編碼

 


 

3、哈夫曼編碼思想:

一、將構成電文的每一個不一樣字符做爲葉子結點,其權值爲電文中字符的使用頻率或次數,構造哈夫曼樹;設計

二、此哈夫曼樹中從根到每一個葉子結點都有一條惟一的路徑,對路徑上各分支約定,作分支標識爲0碼,右標識爲1碼;blog

三、則從根結點到葉子結點的路徑上分支的0、1碼組成的字符串即爲該葉子結點的哈夫曼編碼。字符串

 


4、指令的變長編碼:

若要設計長短不等的編碼,則必須是任一字符的編碼都不是另外一個字符編碼的前綴,這種編碼稱做前綴編碼。
哈夫曼編碼就是使電文長度最短的前綴編碼。字符編碼


 

五:試題:
用二進制來編碼字符串「abcdabeaa」,須要可以根據編碼,解碼回原來的字符串,最少須要多長的二進制字符串?
A、17
B、18
C、19
D、29
解題步驟:
a出現4次,b出現2次,c出現1次,d出現1次,e出現1次。
畫哈夫曼樹:
                          9
                5                4(a)
      2                       3
1(c)   1(d)       1(e)     2(b)
即:
a:1 b:011 c:000 d:001 e:010
長度:a是4次,長度爲4,其餘長度都是3,其餘字符有5個,
因此:4*1+5*3=19。二叉樹

相關文章
相關標籤/搜索