霍夫曼樹是二叉樹的一種特殊形式,又稱為最優二叉樹,其主要作用在於資料壓縮和編碼長度的優化。
給定n個權值作為n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為霍夫曼樹(huffman tree)。
若要使得帶權外路徑長度最小,可以將權值大的節點盡量靠近根節點,這樣路徑短一些;而權值小的節點可以適當遠離根節點,因為權值小,外路徑稍微長一點也沒事。
霍夫曼樹的特性除了壓縮,還可以用於一些關於最小代價問題的決策上。
例如:乙個老木匠,有若干段長短不一的木頭,他想把這些木頭全部拼成一根,每次拼接耗費的體力是當前拼接的兩段木頭的長度,問老木匠最小花費多少體力。
利用優先佇列儲存節點,保證佇列中的節點值是有序的;
每次獲取佇列中的兩個最小值,然後用這兩個節點的和構造乙個新的節點作為它們的父節,然後子節點出隊,父節點入隊;
迴圈這個過程,直到佇列中只有乙個節點為止,返回這個節點即可。
treenode hfmtree
(int
w)// 構造哈夫曼樹
while
( queue.
size()
>1)
return queue.
poll()
;}
資料結構 霍夫曼樹及題目場景應用
霍夫曼樹是二叉樹的一種特殊形式,又稱為最優二叉樹,其主要作用在於資料壓縮和編碼長度的優化。給定n個權值作為n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為霍夫曼樹 huffman tree 若要使得帶權外路徑長度最小,可以將權值大的節點盡量靠近根節點,這樣路徑...
資料結構 霍夫曼樹
帶權路徑長度最小的樹,常用於資料通訊中。構造霍夫曼樹演算法 設給定的一組權值為,據此生成森林f f 中的沒棵二叉樹只有乙個帶權為w1的根節點 i 1,2,n 在f中選取兩棵根節點的權值最小和次小的二叉樹作為左右構造一棵新的二叉樹,新二叉樹根節點的權值為其左 右子樹根節點的權值之和。在f中刪除這兩棵最...
資料結構與演算法 霍夫曼樹 霍夫曼編碼和解碼
找出存放一串字元所需的最少的二進位制編碼。首先統計出每種字元出現的頻率,即 概率 權值。例如 頻率表 a 60,b 45,c 13 d 69 e 14 f 5 g 3 第一步 找出字元中頻率最小的兩個,小的在左邊,大的在右邊,組成二叉樹。在頻率表中刪除此次找到的兩個數,並加入此次最小兩個數的頻率和。...