聽說你還不懂哈夫曼樹和哈夫曼編碼

基本概念

哈夫曼(Huffman)樹又稱最優樹,是一類帶權路徑長度最短的樹,在實際中有廣泛的用途。

基本概念

  1. 路徑:從樹中一個結點到另一個結點之間的分支構成這兩個結點之間的路徑。
  2. 路徑長度:路徑上的分支數目稱作路徑長度。
  3. 樹的路徑長度:從樹根到每一結點的路徑長度之和。
  4. 權:賦予某個實體的一個量,是對實體的某個或某些屬性的數值化描述。 在數據結構中,實體有結點(元素)和邊(關係)兩大類,所以對應有結點權和邊權。 結點權或邊權具體代表什麼意義,由具體情況決定。如果在一棵樹中的結點上帶有權值,則對應的就有帶權樹等概念。
  5. 結點的帶權路徑長度:從該結點到樹根之間的路徑長度與結點上權的乘積。
  6. 樹的帶權路徑長度:樹中所有葉子結點的帶權路徑長度之和,通常記作WPL=i=1nwiliWPL=\sum_{i=1}^{n}{w_i*l_i}
  7. 哈夫曼樹:假設有m個權值{W1, W2, …,Wn},可以構造一棵含n個葉子結點的二叉樹,每個葉子結點的權爲 W;, 則 其中帶權路徑長度 WPL最小的二叉樹稱做最優二叉樹或哈夫曼樹。

下圖中7,5,2,4分別代表其權重,他們的路徑長度都爲2,然後求和得到WPL

在這裏插入圖片描述
這個類似 X權值X路徑

通過上下對比可以看出下面的帶權路徑長度要小,所以下面這個恰爲哈夫曼樹
在這裏插入圖片描述
在哈夫曼樹中,權值越大的結點離根結點越近。根據這個特點,哈夫曼最早給出了一個構造哈夫曼樹的方法,稱哈夫曼算法 。

算法構造

  1. 根據給定的n個權值{W1,W2…Wn},構造n棵只有根結點的二叉樹,這n棵二叉樹構成一個森林F。
  2. 在森林 F 中選取兩棵根結點的權值最小的樹作爲左右子樹構造一棵新的二叉樹,且置新的二叉樹的根結點的權值爲其左 、右子樹上根結點的權值之和。
  3. 在森林F中刪除這兩棵樹,同時將新得到的二叉樹加入F中
  4. 重複2和3,直到F只含一棵樹爲止,這棵樹便是哈夫曼樹

這就是哈夫曼樹,又叫最優二叉樹,特點就是最大的在上面,小的在下面。

設給定權集 w={5,7,2,3,6,8,9}
先找出最小的 2 3 ,w刪去2 3加上5,w現在是{5 5 7 6 8 9}
在這裏插入圖片描述

再找最小的5 5 提出來 加上10 w現在是{10 7 6 8 9}
在這裏插入圖片描述
再找 6 7 加上13 w現在是{10 13 8 9}
在這裏插入圖片描述
再找8 9 得到17 w現在是{10 13 17}
在這裏插入圖片描述
繼續 拿出10 13 得到23 現在w{17 23}在這裏插入圖片描述
繼續拿出17 23 得到40 放回去作爲根節點

在這裏插入圖片描述
帶權路徑長度:WPL=24+34+53+63+73+82+92=108WPL =2*4+3*4+5*3+ 6*3+ 7*3+8*2+9*2= 108

  1. 每個初始結點最終都成爲葉結點,並且權值越小的結點到根結點的路徑長度越大。
  2. 構造過程中共新建了N-1個結點(雙分支結點) ,因此哈夫曼樹中結點總數爲2N:1。
  3. 每次構造都選擇2棵樹作爲新結點的子節點,因此哈夫曼樹中不存在度爲1的結點
    哈夫曼編碼最早用於解決遠距離電報通信的數據傳輸最優化問題。
    比如ABCDE這一段文字。 通過網絡傳輸要用到二進制的數字0和1。來保存A,B,C,D,E五個字母就可以了。
    在這裏插入圖片描述
    如果傳輸的信息很長,那麼編碼也很長在這裏插入圖片描述
    而且不用的字符和字母出現的頻率也不一樣,如A,E,I,O,U或者漢語中的你,我,他,的,了出現的頻率都是很高的。
    我們可以將那些出現較多的字符編碼少一點,而頻率較小的字符編碼長度可以長一點

如,abcde的頻率如下圖,可以將其頻率轉化成數值,來構造哈夫曼樹
在這裏插入圖片描述
構造出來後我們可以將其左分支設置成0,右分支設爲1
在這裏插入圖片描述
這樣就可以從根節點來找其對應的編碼
在這裏插入圖片描述

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