1. 程式人生 > 其它 >【資料結構-樹】哈夫曼樹及其應用

【資料結構-樹】哈夫曼樹及其應用

目錄

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)