1. 程式人生 > >數據結構——第二章樹和森林:04哈夫曼樹與哈夫曼編碼

數據結構——第二章樹和森林:04哈夫曼樹與哈夫曼編碼

一個 例如 stat state 森林 ont 技術 圖片 http

1.結點的路徑長度:從根結點到該結點的路徑上分支的數目。

2.樹的路徑長度:樹中每個結點的路徑長度之和。

3.樹的帶權路徑長度:樹中所有葉子結點的帶權路徑長度之和WPL(T) = ∑wklk(對所有葉子結點)

4.最優樹:在所有含n個結點,並帶相同權值的m叉樹中,必存在一棵其帶權路徑長度取最小值的樹,稱為最優樹。

5.哈夫曼算法構造最優樹:以二叉樹為例:

(1)根據給定的n個權值{w1, w2, ... , wn}構造n棵二叉樹的集合F = {T1, T2, ... ,Tn},其中每棵二叉樹中均只含一個帶權值為wi的根結點,其左、右子樹為空樹;

(2)在F中選取其根結點的權值為最小的兩棵二叉樹,分別作為左、右子樹構造一棵新的二叉樹,並置這棵新的二叉樹根結點的權值為其左、右子樹根結點的權值之和;

(3)從F中刪除這兩棵樹,同時加入剛生成的新樹;

(4)重復(2)(3),直至F中只含一棵樹為止。

例如:已知權值 W= {5, 6, 2, 9, 7}

分析:技術分享圖片

答案:技術分享圖片

6.前綴編碼:指的是,任何一個字符的編碼都不是同一字符集中另一個字符的編碼的前綴。利用赫夫曼樹可以構造一種不等長的二進制編碼,並且構造所得的赫夫曼編碼是一種最優前綴編碼,即使得所傳電文的總長度最短。

例如:數據傳送中的二進制編碼,要傳送數據state、seat、act、tea、cat、set、a、eat,如何使傳送的長度最短?

答:首先規定二叉樹的構造為左走0,右走1。為了保證長度最短,先看字符出現的次數,然後將出現次數當作權(a出現7次,c出現2次,e出現5次,s出現3次,t出現8次)。根據上述構造哈夫曼樹可以得到各字母的哈夫曼編碼:a——10,c——000,e——01,s——001,t——11,所以state的編碼為00111101101,該構造滿足哈夫曼編碼的最短最優性質:

①若兩字母不同,則對應的樹葉不同,因此前綴碼(任一字符的編碼都不是另一個字符編碼)不同,一個路徑不可能是其它路徑的一部分,所以字母之間可以完全區別。

②將所有字符變成二進制的哈夫曼編碼,使帶權路徑長度最短。

數據結構——第二章樹和森林:04哈夫曼樹與哈夫曼編碼