赫夫曼樹
又稱哈夫曼樹,最優二叉樹,其本質就是一個帶權值的樹。
它們的帶權路徑長度分別爲:
圖a: WPL=5*2+7*2+2*2+13*2=54
圖b: WPL=5*3+2*3+7*2+13*1=48
圖b爲赫夫曼樹。
構建赫夫曼樹:
步驟:
1,將所有左,右子樹都爲空的作爲根節點。
2,在森林中選出兩棵根節點的權值最小的樹作爲一棵新樹的左,右子樹,且置新樹的附加根節點的權值爲其左,右子樹上根節點的權值之和。注意,左子樹的權值應小於右子樹的權值。
3,從森林中刪除這兩棵樹,同時把新樹加入到森林中。
4,重複2,3步驟,直到森林中只有一棵樹爲止,此樹便是哈夫曼樹。
圖解:
a.初始森林:5 7 2 13,選取2 5
b.森林7 7 13,選取7 7
c.森林13 14,選取13 14
d.完成赫夫曼樹
赫夫曼編碼:
赫夫曼樹在電文傳輸領域壓縮電文的運用。
步驟:
1.將字母的頻率設定爲權值
2.將這些字母按照權值生成赫夫曼樹
3.約定左分支表示字符‘0’,右分支表示字符‘1’,則可以用從根結點到葉子結點的路徑上的分支字符串作爲該葉子結點字符的編碼。
這是種不等長編碼,將頻率高的字母用較短的二進制表示,頻率低的則用較長二進制表示,以起到壓縮長度的作用。不等長編碼必須滿足前綴碼性質:
前綴碼:對每一個字符規定一個0,1串作爲其代碼,並要求任一字符的代碼都不是其他字符代碼的前綴。這種編碼稱爲前綴碼。
而使用赫夫曼樹生成的字母編碼必定符合前綴碼條件。