哈夫曼樹(最優二叉樹)

2021-07-03 18:49:46 字數 684 閱讀 9882

給定n個權值作為n的

葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小(

所謂樹的帶權路徑長度,就是樹中所有的葉結點

的權值乘上其到根結點的路徑長度)

稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(huffman tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。

假設有n個權值,則構造出的哈夫曼樹有n個葉子結點。 n個權值分別設為 w1、w2、…、wn,則哈夫曼樹的構造規則為:

(1) 將w1、w2、…,wn看成是有n 棵樹的森林(每棵樹僅有乙個結點);

(2) 在森林中選出兩個根結點的權值最小的樹合併,作為一棵新樹的左、右子樹,且新樹的根結點權值為其左、右子樹根結點權值之和;

(3)從森林中刪除選取的兩棵樹,並將新樹加入森林;

(4)重複(2)、(3)步,直到森林中只剩一棵樹為止,該樹即為所求得的哈夫曼樹。

例題:poj——3253 fence repair

#include#include#include#include#include#includeusing namespace std;

int tmp;

struct cmp

};int main()

printf("%i64d\n",sum);

}return 0;

}

哈夫曼樹(最優二叉樹)

最優二叉樹 哈夫曼樹 給定n個權值,試構造一棵有n個葉子結點的二叉樹,每個葉子結點帶權為wi。構造出來的二叉樹的形態可以有多個,我們把其中帶權路徑長度wpl最小的二叉樹稱作最優二叉樹或者哈夫曼樹。語言描述 根據給定的n個權值構成n棵二叉樹的集合f 其中每棵二叉樹ti中只有乙個帶權為wi的根結點,其左...

哈夫曼樹 最優二叉樹

差點忘記寫部落格了.哈夫曼樹 其實就是只利用葉子結點來儲存要用資訊的樹,只不過它在構造的時候就擁有了乙個迷人的特性.就是wpl 帶權路徑長度 是最小的.而且還能用這個樹的來為葉子結點中的資訊進行編碼,得出來的各個編碼一定不會相同,並且不會產生混淆的情況.通過哈夫曼樹的特點.實現了根據乙個佇列來建立一...

最優二叉樹 哈夫曼樹

哈夫曼樹是一種帶權路徑長度最短的二叉樹,也稱為最優二叉樹。帶權路徑長度 wpl 設二叉樹有n個葉子結點,每個葉子結點帶 有權值 wk,從根結點到每個葉子結點的長度為 lk,則每個葉子結 點的帶權路徑長度之和就是 wpl 如何計算帶權路徑長度?根節點記為第0層,帶權路徑長度 如何構造哈夫曼樹 哈夫曼樹...