溫故而知新, 哈夫曼樹(Huffman tree)
阿新 • • 發佈:2018-11-08
哈夫曼樹定義:在一棵二叉樹中,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱哈夫曼樹。
如何構建哈夫曼樹:
一般可以按如下步驟構建:
假設有n個權值W1,W2,...,Wn,將這些權值看成是有n棵樹的森林(每棵樹僅有一個節點),
則哈夫曼樹的構造規則為:
1,在森林中選出2個根節點的權值最小的樹合併為一棵新樹,作為左右子樹,且新樹的根節點權值為其左右子樹根節點權值之和。
2,從森林中刪除這兩棵樹,同時把新樹加入到森林中。
3,重複1,2步驟,直到森林中只有一棵樹為止,此樹就是哈夫曼樹。
哈夫曼樹構造過程是一個遞迴過程,證明此構造過程出來的樹一定是最優樹。
那麼我們只要證明:一棵最優二叉樹,刪除權值最小的兩個葉節點(必須有共同父節點),同時父節點
的權值記為剛剛刪除的2個子節點的權值之和,則新生成的樹也是最優二叉樹。
假定初始最優二叉樹為T,權值為W(T),合併掉T的2個葉節點a,b生成c節點,a和b的權值分別記為W(a), W(b),
記新樹為T'(包含c節點),記樹的權值為W(T'),則W(T)=W(T')+W(a)+W(b),現在證明T'也是一顆最優二叉樹,
假定T'不是最優二叉樹,則有T*(包含c節點)為最優二叉樹,且W(T*)<W(T'),因為T*包含c,
把c拆分成權值分別為W(a),W(b)的a和b,形成新樹T^,那麼W(T^)=W(T*)+W(a)+W(b),
那麼W(T^)<W(T')+W(a)+W(b),最終W(T^)<W(T),這跟T是最優二叉樹矛盾,所以反過來說明T'是最優二叉樹。得證。