權: 樹結點間的邊相關的樹,如圖所示,a結點的權為5,b結點的權為15,可依次推導其他結點的權。
路徑長度: 從樹中乙個結點到另乙個結點之間的分支構成兩個結點之前的路徑,即路徑上的分支數目。如圖所示,二叉樹a中根結點到結點d的路徑長度為4,二叉樹b中根結點到結點d的長度為2。
樹的路徑長度: 從樹根到每乙個結點的路徑長度之和。二叉樹a的樹路徑長度為1+1+2+2+3+3+4+4=20,二叉樹b的樹路徑長度為1+2+3+3+2+1+2+2=16。
結點的帶權的路徑長度: 從該結點到樹根之間的路徑長度與結點上權的乘積。
樹的帶權路徑長度: 樹中所有葉子結點的帶權路徑長度之和。
赫夫曼樹: 帶權路徑長度wpl最小的二叉樹。二叉樹a的wpl為5x1+15x2+40x3+30x4+10x4=315;二叉樹b的wpl為5x3+15x3+40x2+30x2+10x2=220;
1)先把有權值的葉子結點按照從小到大的順序排列成乙個有序序列,即:a5,e10,b15,d30,c40;
2)取頭兩個最小權值的結點作為乙個新結點n1的兩個子結點,相對較小的為左孩子,新結點的權值為5+10=15;
3)將n1替換a和e,插入到有序序列中,保持從小到大排列,即:n1,b15,d30,c40;
4)重複步驟二。n1與b作為新結點n2的兩個子結點,n2的權值為15+15=30;
5)將n2替換n1與b,插入到有序序列中,保持從小到大的排列,即n2,d30,c40;
6)繼續重複上面的步驟,最終完成赫夫曼樹的構造,如圖所示:
最終得到的二叉樹的帶權路徑長度為wpl=40x1+30x2+15x3+10x4+5x4=205。
1)根據給定的n個權值構成n棵二叉樹的集合f=,其中每棵二叉樹ti中只有乙個帶權為wi的根結點,其左右子樹為空;
2)在f中選取兩個根結點的權值最小的樹作為左右子樹構造一棵新的二叉樹,且置新的二叉樹的根結點的權值為其左右子樹上根結點的權值之和;
3)在f中刪除這兩棵樹,同時將新得到的二叉樹加入f中;
4)重複步驟2、3,直到f只含一棵樹為止,此時這棵樹便是赫夫曼樹;
赫夫曼編碼的目的:解決資料傳輸的最優化問題。
設需要編碼的字符集為,各個字元在電文**現的次數或頻率的集合為,以d1,d2 , d3,...dn作為葉子結點,以
w1,w2,w3,...wn作為相應葉子結點的權值來構造一棵赫夫曼樹。規定赫夫曼樹的左分支代表0,右分支代表1,則從根結點到葉子結點所經過的路徑分支
組成的0和1的序列變為該結點對應字元的編碼。
部分參考:
《大話資料結構》
《演算法導論》
哈夫曼樹,赫夫曼樹
參考 赫夫曼樹,別名 哈夫曼樹 最優樹 以及 最優二叉樹 當用 n 個結點 這些結點都作為葉子結點且都有各自的權值 試圖構建一棵樹時,如果構建的這棵樹的帶權路徑長度最小,稱這棵樹為 最優二叉樹 有時也叫 赫夫曼樹 或者 哈夫曼樹 構建哈夫曼樹 在 n 個權值中選出兩個最小的權值,對應的兩個結點組成乙...
赫夫曼樹 樹
在資料膨脹,資訊 的今天,資料壓縮的意義不言而喻。談到資料壓縮,就不能 不提赫夫曼編碼,赫夫曼編碼是首個使用的壓縮編碼方案,即使在今天的知名壓縮演算法裡,依然可以見到赫夫曼編碼的影子。另外,在資料通訊中,用二進位製給每個字元進行編碼時不得不面對乙個問題是如何使電文總長最短且不產生二義性。根據字元出現...
樹 赫夫曼樹
幾個概念 wpl最小的就是赫夫曼樹 赫夫曼樹的建立 將數列 轉成一顆赫夫曼樹的過程 將數列元素從小到大排序 取出最小的兩個元素,生成一棵新的二叉樹,取出的兩個元素作為新二叉樹的子節點 一般權重小的作為子節點 根節點的權重為子節點權重之和 將處理過的兩個元素從列表中刪除,將新的根節點加入列表 重複1 ...