基本概念
1、路徑和路徑長度
在一棵樹中,從一個結點往下可以達到的孩子或孫子結點之間的通路,稱爲路徑。通路中分支的數目稱爲路徑長度。若規定根結點的層數爲1,則從根結點到第L層結點的路徑長度爲L-1。
2、結點的權及帶權路徑長度
若將樹中結點賦給一個有着某種含義的數值,則這個數值稱爲該結點的權。結點的帶權路徑長度爲:從根結點到該結點之間的路徑長度與該結點的權的乘積。
3、樹的帶權路徑長度
樹的帶權路徑長度規定爲所有葉子結點的帶權路徑長度之和,記爲WPL。
4、哈夫曼樹
給定n個權值作爲n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹爲最優二叉樹或者最優搜索樹,也稱爲哈夫曼樹(Huffman Tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。
算法思想
1、將所有節點看成獨立的樹,且左右子樹都爲空,沒有父節點;
2、挑選兩棵根節點權值最小的沒有父節點的樹,生成一個節點作爲它們的父節點,父節點的權值等於他們的權值之和;
3、重複第2步,直到最後變成一棵樹。
結論:從上圖可以看出根節點的值爲構建哈夫曼樹所有節點的值和16 = 7+5+3+1。
哈夫曼編碼
哈夫曼樹應用
1、文件壓縮(資料、音頻、視頻壓縮)
2、節省帶寬(微信預覽圖)