數據結構(二):哈夫曼樹

包括:

一. 哈夫曼樹概念

二. 哈夫曼樹構造方法

三. 哈夫曼編碼


一. 哈夫曼樹

  • 權:在許多應用中,常常將樹中的節點賦上一個有着某種意義的數值,該數值稱爲該節點的權。
  • 節點的帶權路徑長度:從樹根節點到某節點之間的路徑長度與該節點上權值的乘積稱爲該節點的帶權路徑長度。
  • 樹的帶權路徑長度:樹中所有葉子節點的帶權路徑長度之和稱爲該樹的帶權路徑長度。

        哈夫曼樹:對於一組具有確定權值的葉子節點可以構造出多個具有不同帶全路徑長度的二叉樹。把其中帶權路徑長度最小的二叉樹稱爲哈夫曼樹,又稱爲最優二叉樹。


二. 哈夫曼樹構造方法

  1. 根據給定的n個權值,使對應節點構成n顆二叉樹的森林,其中每顆二叉樹中都只有一個帶權值的根節點,其左右子樹都爲空。

  2. 在森林中選擇兩個權值最小的葉子節點作爲左右子樹構造一個新的二叉樹,且置新的二叉樹的根節點權值爲左右子樹上根節點的權值之和。

  3. 在森林中,用新得到的二叉樹代替選取的二個樹。

  4. 重複(2)(3)步驟,直到只含一棵樹位置,該樹便是哈夫曼樹。

例如:


圖1

圖2

圖3

圖4


三. 哈夫曼編碼

  • 編碼:在數據通信中,經常需要將傳送的文字轉換爲二進制字符0和1組成的字符串,這個過程稱爲編碼。
  • 哈夫曼編碼:設需要編碼的字符集合爲:{d1,d2,...,dn},各個字符在電文中出現的次數集合爲{w1,w2,...,wn},那麼以d1,d2...,dn作爲葉子節點,以w1,w2,...,wn作爲個節點的權值構造一顆哈夫曼樹,規定哈夫曼樹中左分支爲0,右分支爲1,則從根節點到葉子節點所經過的分支對應的0和1序列就稱爲該節點對應字符的編碼。這樣的編碼就是哈夫曼編碼。
  • 哈夫曼編碼的平均長度=d1*w1 + d2*w2+...+dn*wn





發佈了97 篇原創文章 · 獲贊 19 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章