路 徑: 由一結點到另一結點間的分支所構成。
路徑長度: 路徑上的分支數目。a→e的路徑長度=2
樹的路徑長度: 從樹根到每一結點的路徑長度之和。樹長度=10
帶權路徑長度: 結點到根的路徑長度與結點上權的乘積。
樹的帶權路徑長度: 樹中所有葉子結點的帶權路徑長度之和。
哈 夫 曼 樹:帶權路徑長度最小的二叉樹。
huffman樹簡介
樹的帶權路徑長度weighted path length
哈夫曼樹則是:wpl 最小的二叉樹。
有n個權值分別為w1、w2…、wn,構造一顆有n個葉子結點的二叉樹,每個葉子結點帶的權值為wi,其中wpl最小的二叉樹叫做最優二叉樹
哈夫曼樹的特點:
1. 權值越大的葉子結點越靠近根結點,而權值越小的葉子結點越遠離根結點。
2. 只有度為0(葉子結點)和度為2(分支結點)的結點,不存在度為1的結點.
構造哈夫曼樹的基本思想:
權值大的結點用短路徑,權值小的結點用長路徑。
構造huffman樹的步驟(即huffman演算法):
(1) 由給定的 n 個權值,構造具有 n 棵擴充二叉樹的森林f = ,其中每一棵擴充二叉樹 ti 只有乙個帶有權值 wi 的根結點,其左、右子樹均為空。
① 在 f 中選取兩棵根結點的權值最小的擴充二叉樹, 做為左、右子樹構造一棵新的二叉樹。置新的二叉樹的根結點的權值為其左、右子樹上根結點的權值之和。
② 在 f 中刪去這兩棵二叉樹。
③ 把新的二叉樹加入 f。
操作要點: 合併、刪除與替換
設有4個字元d,i,a,n,出現的頻度分別為7,5,2, 4,怎樣編碼才能使它們組成的報文在網路中傳得最快?
等長編碼,例如用二進位制編碼來實現。 取 d=00,i=01,a=10,n=11
不等長編碼,例如用哈夫曼編碼來實現。 取 d=0; i=10, a=110, n=111
最快的編碼是非等長的huffman碼!
實現huffman編碼先要構造huffman樹!
構造huffman樹的步驟:
操作要點1:對權值的合併、刪除與替換 ——在權值集合中,總是合併當前值最小的兩個權
注:方框表示外結點(葉子,字元對應的權值), 圓框表示內結點(合併後的權值)。
操作要點2:按左0右1對huffman樹的所有分支編號!
將 huffman樹 與 huffman編碼 掛鉤。
huffman編碼結果:d=0, i=10, a=110, n=111,wpl=1bit×7+2bit×5+3bit(2+4)=35
特點:每一碼都不是另一碼的字首,絕不會錯譯! 稱為字首碼
霍夫曼編碼的基本思想是:概率大的字元用短碼,概率小的用長碼。由於霍夫曼樹的wpl最小,說明編碼所需要的位元數最少。這種編碼已廣泛應用於網路通訊中。
對應的哈夫曼編碼(左0右1):
huffman碼wpl=2(0.19+0.32+0.21) + 4(0.07+0.06+0.10) +5(0.02+0.03) =1.44+0.92+0.25=2.61
二進位製碼wpl=3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3
另一種結果表示:
資料結構 赫夫曼樹
赫夫曼樹 huffman tree 又稱為最優樹,是一類帶權路徑長度最短的樹。本文僅討論最優二叉樹。樹的路徑長度是指從樹根到樹中其餘各個結點的路徑長度之和。對具有n個結點的二叉樹而言,完全二叉樹具有最短的樹的路徑長度。若在二叉樹中,樹葉結點帶有權值,則有 結點的帶權路徑長度定義為從樹根到該結點之間的...
資料結構 赫夫曼樹
赫夫曼編碼是首個試用的編碼方案。屬於無失真壓縮的編碼方案。在資料通訊中,赫夫曼編碼可以根據字元出現頻率,構造出一種不等長的二進位制,使編碼後的電文長度最短,且不產生二義性。weighteed path length是樹中所有節點的帶權路徑長度之和。wpl 值越小,說明構造出來的二叉樹效能越優。赫夫曼...
資料結構(八) 赫夫曼樹
一 基本介紹 1 給定n個權值作為n個葉子節點,構造一顆二叉樹,如果這個樹的帶權路徑長度達到最小,就叫做 最優二叉樹 也叫 赫夫曼樹 帶權路徑最短 最優二叉樹 赫夫曼樹 2 赫夫曼樹是帶權路徑長度最短的樹,權值較大的節點離根很近 二 重要概念 三 赫夫曼樹建立思路 乙個數列,要求轉成一顆赫夫曼樹 1...