哈夫曼樹及哈夫曼編碼

2021-10-01 14:19:06 字數 2221 閱讀 9320

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

樹節點間的邊相關的數叫做權。

從樹中的乙個節點到另乙個節點之間的分支構成兩個點之間的路徑,路徑上的分支數目稱作路徑長度。

圖中二叉樹a中,跟節點到d的路徑長度就是4,b中根節點到d的路徑長度為2。

樹的路徑長度就是從樹根到每乙個節點的路徑長度之和。二叉樹a的路徑長度就為1+1+2+2+3+3+4+4=20。二叉樹b的樹路徑長度就為1+2+3+3+2+1+2+2=16。

如果考慮帶權的節點,節點的帶權的路徑長度就是從該節點到樹根之間的路徑長度乘該節點的權。

數的帶權路徑長度就是所有葉子節點的帶權路徑長度之和。

帶權路徑長度(wpl)最小的二叉樹稱作哈夫曼樹。

下面我們以【5、8、4、11、9、13】為例來畫出哈夫曼樹(數字大小代表權重大小,越大的權重越大)

第一步:按從小到大排序。

【5、8、4、11、9、13】→【4、5、8、9、11、13】

第二步:選最小兩個數畫出乙個樹,最小數為4和5。

給定的4、5、8、9、11、13為白色, 紅色的9為4+5,與給定的白9無關,新序列為:【紅9(含子節點4、5)、8、9、11、13】

取兩個最小數8和9:

排序:

重複該過程直到最後的結果

哈夫曼研究這種最優樹的目的是為了解決當年遠距離通訊(主要是電報)的資料傳輸的最優化問題。

比如我們有一段文字"badcadfeed",顯然用二進位制數字(0和1)表示是很自然的想法。

這樣真正傳輸的資料就是"001000011010000011101100100011",對方接收時同樣按照3位一組解碼。如果一篇文章很長,這樣的二進位制串也非常的可怕。而且事實上,每個字母或者漢子的出現頻率是不同的。

假設六個字母的頻率為a 27,b 8, c 15, d 15 , e 30, f 5,合起來正好是100%,那就意味著我們完全可以用哈夫曼樹來規劃它們。

左圖為構造哈夫曼樹的過程的權值顯示。右圖為將權值左分支改為0,右分支改為1後的哈夫曼樹。

我們對這六個字母用其從樹根到葉子所經過的路徑的0或1來編碼,可以得到下表:

也就是說我們的資料被壓縮了,節約了大概17%的儲存或傳輸成本。隨著字元的增加和多字元權重的不同,這種壓縮會更顯出優勢來。

仔細觀察上面的赫夫曼編碼表中各個字母的編碼會發現,不存在容易與1001、1000混淆的10、100等編碼。這就說明若要設計長短不等的編碼,則必須是任一字元的編碼都不是另乙個字元的編碼的字首,這種編碼稱作字首編碼

可僅僅是這樣不足以讓我們去方便的解碼,因此解碼時,還是要用到哈夫曼樹,即傳送方和接收方必須約定好同樣的哈夫曼編碼規則。

下面是赫夫曼編碼的定義:

一般的,設需要編碼的字符集為,各個字元在電文**現的次數或頻率集合為,以d1,d2,…dn作為葉子結點,以w1,w2,…wn作為相應葉子結點的權值來構造一棵赫夫曼樹。規定赫夫曼樹的左分支代表0,右分支代表1,則從根節點到葉子節點所經過的路徑分支組成的0和1的序列便為該結點對應字元的編碼,這就是赫夫曼編碼

其實赫夫曼樹使用場景還真不少,例如apache負載均衡的按權重請求策略的底層演算法、咱們生活中的路由器的路由演算法、利用哈夫曼樹實現漢字點陣字形的壓縮儲存、快速檢索資訊等等底層優化演算法,其實核心就是因為目標帶有權重,長度遠近這類資訊才能構建哈夫曼模型。

哈夫曼樹及哈夫曼編碼

哈夫曼樹,最優二叉樹,帶權路徑長度 wpl 最短的樹。它沒有度為1的點,是一棵嚴格的二叉樹 滿二叉樹 了解哈夫曼樹,我們首先要知道樹的幾個相關術語,並了解什麼是wpl。注 樹的wpl這個概念非常重要,這個公式直接產生了哈夫曼編碼資料壓縮的應用 根據給定的n個權值構成n棵二叉樹的集合f 其中每棵二叉樹...

哈夫曼編碼 哈夫曼樹

1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....

哈夫曼樹 哈夫曼編碼

定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...