目錄
一、帶權路徑長度
結點的權:有某種現實含義的數值(如:表示結點的重要性等)
結點的帶權路徑長度:從樹的根到該結點的路徑長度(經過的邊數)與該結點上權值的乘積
樹的帶權路徑長度:樹中所有葉子結點的帶權路徑長度之和
二、哈夫曼樹的定義
在含有n個帶權葉結點的二叉樹中,其中帶權路徑長度(WPL)最小的二叉樹稱爲哈夫曼樹,也稱最優二叉樹
三、哈夫曼樹的構造
給定n個權值分別爲w1,w2,....wn的結點,構造哈夫曼樹的算法描述如下:
1)將這n個結點分別作爲n棵僅含一個結點的二叉樹,構成森林F。
2)構造一個新結點,從F中選取兩棵根結點權值最小的樹作爲新結點的左、右子樹,並且將新結點的權值置位左、右子樹上根結點的權值之和。
3)從F中刪除剛纔選出的兩棵樹,同時將新得到的樹加入F中。
4)重複步驟2)3),直至F中只剩下一棵樹爲止。
注:
1)每個初始結點最終都稱爲葉子結點,且權值越小的結點到根結點的路徑長度越大
2)哈夫曼樹的結點總數爲2n - 1
3)哈夫曼樹中不存在度爲1的結點
4)哈夫曼樹並不唯一,但WPL必然相同且爲最優
四、哈夫曼編碼
固定長度編碼——每個字符用相等長度的二進制表示
ASCII編碼
A——01000001
B——01000010
C——01000011
D——01000100
每個字符用長度爲2的二進制表示
A——00
B——01
C——10
D——11
假設,100題中有80選C,10題選A,8題選B,2題選D
所有答案的二進制長度 = 80*2 + 10*2 + 8*2 + 2*2 = 200bit
可變長度編程——允許對不同字符用不等長的二進制位表示
若沒有一個編碼是另一個編碼的前綴,則稱這樣的編碼爲前綴編碼
哈夫曼樹不唯一——哈夫曼編碼不唯一
C——0
A——10
B——111
D——110
五、總結