Huffman樹的構造原理

2021-10-25 04:19:32 字數 1509 閱讀 7687

在編碼過程中,人們需要盡可能的提高編碼效率。例如,對於26個字母的編碼,可以輕易地用五位二進位制數來編碼。然而,這樣做會造成很大的空間浪費。於是不難想到,用1~5位二進位制數來編碼這26個字母。可是,這樣的編碼存在二義性。如,將a編碼為0,b編碼為01,c編碼為00,d編碼為1,對於「0001」這樣一串編碼,就存在多種解釋。而huffman發明的這個樹完美地解決了問題。

在一篇英語寫成的文章中,每個字母有其各自的出現頻率,若用一棵二叉樹儲存字母,我們希望出現頻率較高的字母在二叉樹上方,這樣可以在遍歷時效率更高。於是,我們在統計字母出現次數後,為字母分配相應的權值,權值較高的出現在二叉樹上方。同時,二叉樹的構造決定了它包含每個字母編碼均不同。具體方法是,為每個左結點編碼0,為每個右結點編碼1,到達字母的0-1路徑即組成了該字母的編碼。

給定一串權值由低到高的葉結點,每次取出兩個結點,和已生成森林中無父結點的所有結點共同進行比較,並選出兩個權值最小的結點,在森林中以較小結點為左結點,以較大結點為右結點,建立父結點,並將左右結點的權值之和賦予父結點,未進入森林的結點繼續參與比較,直至森林形成一棵二叉樹,該樹即為huffman樹。

給定權值: 2,3,5,7,11,13,17,19,則構造huffman樹的過程如下:

1.從權值中選擇最小的2、3,此時森林為空,則由這兩個結點生成父結點,並為其賦值為5。

2.繼續從權值中選擇最小的5、7,與森林中無父結點的5比較,則分別選擇權值中的5和森林中的5,為父結點賦值10,權值7留下進行下次比較。

3.繼續從權值中選出7、11,與10比較,選擇最小的7與10作為左、右結點。

4.選擇11、13,由於這兩個權值均小於無父結點的權值17,則11和13在森林中建立一棵新樹。

5.權值中最後的17、19,與無父結點的17、24比較,選擇17與17作為左、右結點,構成huffman樹根的左節點,而19則與24作為右節點,至此,huffman樹構造完畢。

將每條左路徑編碼為0,右路徑編碼為1,則得到該權值下的編碼規則。

在上圖中,對權值2的編碼即為遍歷至2的路徑:01110,這樣容易得到所有的權值所對編碼。由於每個權值的編碼都由根結點出發生成,可知,即使每個權值編碼長度不同,在解碼過程中讀至一特定序列,即可識別出該權值,進而判斷該權值所對應的資料。

《演算法導論》筆記 霍夫曼(Huffman)樹構造

huffman code是應用很廣泛的一種文字壓縮編碼方式。它的原理就是用不等長的編碼來表示不同出現頻率的字元。出現頻率高的字元,就用比較短的編碼來表示,出現頻率低的,就是較長的編碼來表示。如下表 圖中是乙個檔案中出現的字元 abcdeft 以及相應的出現頻率。如果使用等長編碼方式,則每個字元都要用...

Huffman樹與Huffman編碼

一.哈夫曼樹概念 路徑 祖先到節點之間的分支構成一條通往節點的路徑 路徑長度 路徑上分支的數目稱為路徑長度 節點的權 給樹中節點所設的物理意義的值 節點帶權路徑長度 從根到該點路徑長度與該點權值的乘機 huffman樹就是所有樹中每點帶權路徑加和最短的樹。二.huffman樹構造步驟 1.根據每個點...

Huffman樹與Huffman編碼

huffman tree簡介 赫夫曼樹 huffman tree 又稱最優二叉樹,是一類帶權路徑長度最短的樹。假設有n個權值,如果構造一棵有n個葉子節點的二叉樹,而這n個葉子節點的權值是,則所構造出的帶權路徑長度最小的二叉樹就被稱為赫夫曼樹。這裡補充下樹的帶權路徑長度的概念。樹的帶權路徑長度指樹中所...