赫夫曼樹,也稱最優二叉樹。樹的帶權路徑長度為樹中所有葉子節點的帶權路徑長度之和最短。書上舉例多if條件巢狀判斷,但由於各個條件出現的概率不一樣,優化條件排布的先生順序,程式執行的總路徑長度也不一樣,將高概率的條件放在前面,就使總長度最小。 赫夫曼樹的原理就是這樣, 在程式優化時,可以使用這個原理。
發散:乙個if,就可以理解是一次二叉樹的分支。
運用:使用不等長的碼,的確可以減少碼流的長度,但是乙個很大的困難就在於如何正確的解碼。 使用赫夫曼碼,可以保證不重複的歧義碼,既使總體編碼最短,又沒有重複的歧義碼,也就可以正確的解碼。 但是有利有弊,他的擴充套件並不是很方便,尤其是在帶權的情況下,增加節點,樹要重新構造。
下面這個例子,就是以出現概率為權值,構造最優二叉樹
以下是對應的資料結構, a 是初始值,b是計算後的值。 這裡需要注意的是,當出現相同權值的時候, 排在前面的節點先加。
發下是構造樹的演算法。迴圈取出權值最小的節點。 對照上面的資料結構,比較容易理解。
資料結構學習筆記 最優二叉樹(赫夫曼樹)
1.引言 最優二叉樹是帶權路徑長度最短的二叉樹。根據結點的個數,權值的不同,最優二叉樹的形狀也各不相同。它們的共同點是 帶權值的結點都是葉子結點。權值越小的結點,其到根結點的路徑越長。構造最優二叉樹的方法如下 1 將每個帶有權值的結點作為一棵僅有根結點的二叉樹,樹的權值為結點的權值。2 將其中兩棵權...
構造赫夫曼樹(最優二叉樹)
例如,有權值分別為 5 10 15 20 25 40的結點,根據以上演算法構造出乙個哈夫曼樹。取這六個樹中最小的兩個樹5 10連成乙個二叉樹,其權值為15 此時森林裡的樹變為15 5 10 15 20 25 40。取這五個樹中最小的兩個樹 15 5 10 15 構成乙個新的二叉樹30 5 10 15...
資料結構 赫夫曼樹
赫夫曼樹 huffman tree 又稱為最優樹,是一類帶權路徑長度最短的樹。本文僅討論最優二叉樹。樹的路徑長度是指從樹根到樹中其餘各個結點的路徑長度之和。對具有n個結點的二叉樹而言,完全二叉樹具有最短的樹的路徑長度。若在二叉樹中,樹葉結點帶有權值,則有 結點的帶權路徑長度定義為從樹根到該結點之間的...