哈夫曼編碼習題

假設用於通信的電文僅由8個字母組成,字母在電文中出現的頻率分別爲

0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10

請爲這8個字母設計哈夫曼編碼。

表格形式:

NO. data parent Lchild Rchild
0 0.07(A) 10 NULL NULL
1 0.19(B) 12 NULL NULL
2 0.02(C) 8 NULL NULL
3 0.06(D) 9 NULL NULL
4 0.32(E) 13 NULL NULL
5 0.03(F) 8 NULL NULL
6 0.21(G) 12 NULL NULL
7 0.10(H) 10 NULL NULL
8 0.05 9 2 5
9 0.11 11 8 3
10 0.17 11 0 7
11 0.28 13 9 10
12 0.4 14 1 6
13 0.6 14 11 4
14 1.0 NULL 12 13

 

該表格也就是靜態三叉鏈表,小編自己由多加了一列編號,三叉鏈表從左到右依次爲權值(data)、雙親序號(parent)、左孩子序號(Lchild)、右孩子序號(Rchild)。

通俗的說,求哈夫曼編碼就是根據三叉鏈表計算出最優二叉樹,算法是(在鏈表權值內取最小的兩位權值相加,然後刪去最小的兩位數,將它們的和存入鏈表,然後重複取最小的兩個數,存入兩個數的和,刪去原來的兩個相加的小數。這一個循環的過程,一直到最後算出的那個最終的數,就是最優二叉樹的權值)

本題來講,第一步就是找到兩個最小的數,編號分別爲2(0.02),5(0.03).【一般以較小的數爲左孩子,較大的數爲右孩子】然後寫入到編號爲8的左孩子和右孩子的二叉鏈表處。直至填滿編號爲14的三叉鏈表。

二叉樹表示:

根據三叉鏈表,便可以畫出二叉樹,A-H對應着相應的數據,可以在二叉樹中找到對應的位置,按照左0右1的編碼規則,得到每個字母對應的哈夫曼編碼。(也就是每個字母對應的二叉樹路徑)

Endeavor

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章