1. 程式人生 > >溫故而知新, 哈夫曼樹(Huffman tree)

溫故而知新, 哈夫曼樹(Huffman tree)

哈夫曼樹定義:在一棵二叉樹中,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱哈夫曼樹。 如何構建哈夫曼樹: 一般可以按如下步驟構建: 假設有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'是最優二叉樹。得證。