1. 程式人生 > >淺談哈夫曼編碼

淺談哈夫曼編碼

就是 不知道 重復 技術分享 樹的應用 應用 img 集合 另一個

做NOIP初賽遇到了,還是填個坑吧


首先,哈夫曼編碼是哈夫曼樹的應用,不知道什麽是哈夫曼樹的可以搜一下

具體操作:

(1)我們有一個集合,集合裏有一些數,升序排列

(2)每次選出兩個最小的數,然後合並,刪除,把新生成的數放到集合裏

(3)重復步驟2,直到用完所有的數,樹也就建好了,然後把左兒子定為0,右兒子定為1

(4)每個元素的哈夫曼編碼就是其路徑上的數


這樣說可能不太明白,我們還是舉個例子

現有一段文言文,要通過二進制哈夫曼編碼進行壓縮。簡單起見,假設這段文言文只由
4 個漢字“之”、“乎”、“者”、“也”組成,它們出現的次數分別為 700、600、300、

400。那麽,“也”字的編碼長度可能是( )。
A. 1 B. 2 C. 3 D. 4

這是NOIP2011提高組初賽的多選

正確答案是BC

我們只舉一個來說,另一個就顯而易見了

首先集合裏有四個數{300,400,600,700}

先取兩個300,400

合並,300+400=700

如圖

技術分享圖片

然後放入集合,此時{600,700,700}

取600和我們剛才合並出來的700

技術分享圖片

然後是700和700

技術分享圖片

樹就建好了

然後是標號:

技術分享圖片

一一對應,我們得到“也”:111 長度為3

保險起見,我把另一個圖畫一下:(其實就是把合並的順序改變一下)

技術分享圖片

此時 “也”:01 長度為2

這同時也說明了,在集合中有重復的數時,哈夫曼編碼不止一種。

希望對大家有幫助

淺談哈夫曼編碼