資料結構之哈夫曼樹及哈夫曼編碼

2021-08-16 05:03:34 字數 1181 閱讀 3856

當樹中的節點被賦予乙個表示某種意義的數值,我們稱之為該節點的權。從樹的根節點到任意節點的路徑長度(經過的邊數)與該節點上權值的乘積稱為該節點的帶權路徑長度。樹中所有葉節點的帶權路徑長度之和稱為該樹的帶權路徑長度(wpl)。當帶權路徑長度最小的二叉樹被稱為哈夫曼樹,也成為最優二叉樹。

如下圖所示,有三課二叉樹,每個樹都有四個葉子節點a,b,c,d,分別取帶權7,5,2,4。他們的帶權路徑長度分別為

節點如果像c中的方式分布的話,wpl能取最小值(可證明),我們稱為哈夫曼樹。

哈夫曼樹在構造時每次從備選節點中挑出兩個權值最小的節點進行構造,每次構造完成後會生成新的節點,將構造的節點從備選節點中刪除並將新產生的節點加入到備選節點中。新產生的節點權值為參與構造的兩個節點權值之和。舉例如下:

在處理字串序列時,如果對每個字串採用相同的二進位制位來表示,則稱這種編碼方式為定長編碼。若允許對不同的字元採用不等長的二進位制位進行表示,那麼這種方式稱為可變長編碼。可變長編碼其特點是對使用頻率高的字元採用短編碼,而對使用頻率低的字元則採用長編碼的方式。這樣我們就可以減少資料的儲存空間,從而起到壓縮資料的效果。而通過哈夫曼樹形成的哈夫曼編碼是一種的有效的資料壓縮編碼。

如果沒有乙個編碼是另乙個編碼的字首,則稱這樣的編碼為字首編碼。如0,101和100是字首編碼。由字首碼形成的序列可以被唯一的組成乙個字串序列。如00101100可以被唯一的分析為0,0,101和100。

示例:我們對乙個字串進行統計發現a-f出現的頻率分別為a:45,b:13,c:12,d:16,e:9,f:5,我們對該字串進行採用哈夫曼編碼進行儲存。

這樣算下來使用224二進位制位就可以將該字串儲存起來,因為哈夫曼碼是字首碼,所以可以唯一的還原出原來的字串行。如果我們每個字元使用3位進行儲存(至少3位),那麼需要300bit才能將該字串儲存下。

參考部落格:

資料結構 哈夫曼樹 哈夫曼編碼

哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...

哈夫曼編碼 哈夫曼樹 (資料結構)

哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...

哈夫曼樹及哈夫曼編碼

哈夫曼樹,最優二叉樹,帶權路徑長度 wpl 最短的樹。它沒有度為1的點,是一棵嚴格的二叉樹 滿二叉樹 了解哈夫曼樹,我們首先要知道樹的幾個相關術語,並了解什麼是wpl。注 樹的wpl這個概念非常重要,這個公式直接產生了哈夫曼編碼資料壓縮的應用 根據給定的n個權值構成n棵二叉樹的集合f 其中每棵二叉樹...