一、最優樹的定義:設有
n 個葉子結點,且每個葉子結點有乙個權值,則包含這
n個葉子結點的所有
m 叉樹中,必存在一棵其
帶權路徑長度取最小值的樹,稱為
「最優樹」
。最優樹可能不止乙個!
路徑:
從樹中乙個結點到另乙個結點之間的分支所構成的通路 。
路徑長度:
路徑上分支的數目。
結點的帶權路徑長度:從樹根到該結點之間的長度
l與結點權值
w的乘積
( l * w
)。樹的帶權路徑長度:樹中所有葉子
結點的帶權路徑長度之和:wpl(t) = s w
k lk
二、如何構造最優樹(哈夫曼演算法)
問題:已知n個權值,用n個權值作為葉子結點,構造一棵二叉樹,使該二叉樹的帶權路徑長度最短。
(1)根據給定的
n 個權值
,構造
n 棵二叉樹的集合: f=
, 其中每棵二叉樹中均只含乙個帶權值為 wi
的根結點
,其左、右子樹為空樹;
(2)在
f 中選取其根結點的
權值為最小
的兩棵二叉樹
,分別作為左、右子樹構造一棵新的二叉樹,並置這棵新的二叉樹根結點的權值為其左、右子樹根結點的權值之和;
假設有n個葉子結點,要構造一棵m叉最優樹,
如果(n-1)mod(m-1)=0,則n個結點正好構成一棵m叉的正則樹。
否則,需要補充一些虛葉子結點,構成一棵m叉樹。補充的虛結點的個數為 (m-1)- (n-1)mod(m-1)。
三、字首編碼指的是,編碼字符集中
任何乙個字元的編碼都不是同一字符集中另乙個字元的編碼的字首。
在編碼集合對應的二叉樹中,所有編碼都在葉子節點上。
利用哈夫曼樹可以構造一種不等長的二進位制編碼,並且構造所得的哈夫曼編碼是一種最優字首編碼,使所傳電文的總長度最短。
舉例:已知某系統在通訊聯絡中只可能出現八種字元a,b,c,d,e,f,g,h,其概率分別為:0.05, 0.29, 0.07, 0.08, 0.14, 0.23,0.03,0.11試設計哈夫曼編碼.
設權w =
a b c d e f g h
哈夫曼編碼:0110,
哈夫曼樹與哈夫曼編碼
在一般的資料結構的書中,樹的那章後面,著者一般都會介紹一下哈夫曼 huffman 樹和哈夫曼編碼。哈夫曼編碼是哈夫曼樹的乙個應用。哈夫曼編碼應用廣泛,如 jpeg中就應用了哈夫曼編碼。首先介紹什麼是哈夫曼樹。哈夫曼樹又稱最優二叉樹,是一種帶權路徑長度最短的二叉樹。所謂樹的帶權路徑長度,就是樹中所有的...
哈夫曼樹與哈夫曼編碼
1.哈夫曼 huffman 編碼是哈夫曼樹的乙個應用。2.哈夫曼樹又稱為最優二叉樹,是一種帶權路徑長度最短的二叉樹。所謂樹的帶權路徑長度,就是樹中所有的葉結點的相對值乘上其到根結點的路徑和權值。3.影象jpg就是利用了哈夫曼編碼。4.哈夫曼樹是最優二叉樹,子樹有左右次序之分。5.哈夫曼樹的形態不是唯...
哈夫曼樹與哈夫曼編碼
哈夫曼樹是一種簡單的樹結構,建樹過程如下 給出一組資料,不斷選擇最小的兩個數,並用兩個數的和作為它們的parent節點,再從資料中刪除這兩個數,將兩個數的和加入資料中,直到所有的資料都被加入樹結構,形成一顆樹。這顆樹的所有非葉子節點都有兩個child,兩個child的值的和則是這個節點的值,根節點是...