先編造哈夫曼樹,哈夫曼樹構造規則:
假設有n個權值,則構造出的哈夫曼樹有n個葉子結點。 n個權值分別設為 w1、w2、…、wn,則哈夫曼樹的構造規則為:
(1) 將w1、w2、…,wn看成是有n 棵樹的森林(每棵樹僅有一個結點);
(2) 在森林中選出兩個根結點的權值最小的樹合併,作為一棵新樹的左、右子樹,且新樹的根結點權值為其左、右子樹根結點權值之和;
(4)重複(2)、(3)步,直到森林中只剩一棵樹為止
構造完成之後,從這個樹根結點開始,預設左子樹為0,右子樹為1,直到葉子結點為止,葉子結點的編碼就是需要的編碼。
舉例
知字元A B C D E F的權值為8 12 5 20 4 11
哈夫曼樹就是:
60
/ \
23 37
/ \ / \
F(11) B(12) 17 D(20)
A(8) 9
E(4) C(5)
編碼就是 A:100, B:01, C:1011, D: 11, E:1010 ,F:00
先編造哈夫曼樹,哈夫曼樹構造規則:
假設有n個權值,則構造出的哈夫曼樹有n個葉子結點。 n個權值分別設為 w1、w2、…、wn,則哈夫曼樹的構造規則為:
(1) 將w1、w2、…,wn看成是有n 棵樹的森林(每棵樹僅有一個結點);
(2) 在森林中選出兩個根結點的權值最小的樹合併,作為一棵新樹的左、右子樹,且新樹的根結點權值為其左、右子樹根結點權值之和;
(4)重複(2)、(3)步,直到森林中只剩一棵樹為止
構造完成之後,從這個樹根結點開始,預設左子樹為0,右子樹為1,直到葉子結點為止,葉子結點的編碼就是需要的編碼。
舉例
知字元A B C D E F的權值為8 12 5 20 4 11
哈夫曼樹就是:
60
/ \
23 37
/ \ / \
F(11) B(12) 17 D(20)
/ \
A(8) 9
/ \
E(4) C(5)
編碼就是 A:100, B:01, C:1011, D: 11, E:1010 ,F:00