【資料結構-樹】哈夫曼樹及其應用
阿新 • • 發佈:2022-11-30
目錄
1 哈夫曼樹的構造
- 將 n 個結點作為 n 棵僅含一個節點的二叉樹,構成森林 F
- 在 F 中選取兩棵權值最小的二叉樹,作為新結點的左右子樹,並將新結點的權值置為左、右子樹的根結點的權值之和
- 將新結點的二叉樹加入 F 中,同時刪去原來兩棵選取出來的二叉樹
- 重複以上步驟,直到 F 中只剩一棵二叉樹
【哈夫曼樹的性質】
- 構造過程中一共新建了 n-1 個結點
- 總結點數為 2n-1
- 不存在度為 1 的結點
- 哈夫曼樹並不唯一
- 哈夫曼樹的 WPL 一定相同且最優
2 哈夫曼樹的應用——哈夫曼編碼
哈夫曼編碼的譯碼過程(從編碼到字元):
- 從左至右依次掃描字串的各位
- 從哈夫曼樹根開始,根據串中當前字元,沿當前結點的左指標或右指標,一直移動到葉結點為止,輸出葉結點中儲存的字元
- 一直重複這個過程,直到掃描到字串結束為止
3 相關例子
- WPL:樹的所有葉結點的帶權路徑長度之和
-
WPL = (W1L1 + W2L2 + W3L3 + ... + WnLn)
,N 個權值Wi (i=1,2,...n) 構成一棵有 N 個葉結點的二叉樹,相應的葉結點的路徑長度為 Li (i=1,2,...n)