【Huffman】哈夫曼樹與哈夫曼編碼

基本概念

1、路徑和路徑長度
在一棵樹中,從一個結點往下可以達到的孩子或孫子結點之間的通路,稱爲路徑。通路中分支的數目稱爲路徑長度。若規定根結點的層數爲1,則從根結點到第L層結點的路徑長度爲L-1。

2、結點的權及帶權路徑長度
若將樹中結點賦給一個有着某種含義的數值,則這個數值稱爲該結點的權。結點的帶權路徑長度爲:從根結點到該結點之間的路徑長度與該結點的權的乘積。

3、樹的帶權路徑長度
樹的帶權路徑長度規定爲所有葉子結點的帶權路徑長度之和,記爲WPL。

4、哈夫曼樹

給定n個權值作爲n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹爲最優二叉樹或者最優搜索樹,也稱爲哈夫曼樹(Huffman Tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。

算法思想

1、將所有節點看成獨立的樹,且左右子樹都爲空,沒有父節點;

2、挑選兩棵根節點權值最小的沒有父節點的樹,生成一個節點作爲它們的父節點,父節點的權值等於他們的權值之和;

3、重複第2步,直到最後變成一棵樹。

這裏寫圖片描述

結論:從上圖可以看出根節點的值爲構建哈夫曼樹所有節點的值和16 = 7+5+3+1。

哈夫曼編碼

這裏寫圖片描述

哈夫曼樹應用

1、文件壓縮(資料、音頻、視頻壓縮)
2、節省帶寬(微信預覽圖)

發佈了150 篇原創文章 · 獲贊 283 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章