資料結構入門 赫夫曼Huffman樹及其應用

2021-10-07 21:53:18 字數 2462 閱讀 4696

路    徑: 由一結點到另一結點間的分支所構成。

路徑長度: 路徑上的分支數目。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...