淺談哈夫曼編碼
阿新 • • 發佈:2018-10-10
就是 不知道 重復 技術分享 樹的應用 應用 img 集合 另一個
400。那麽,“也”字的編碼長度可能是( )。
A. 1 B. 2 C. 3 D. 4
做NOIP初賽遇到了,還是填個坑吧
首先,哈夫曼編碼是哈夫曼樹的應用,不知道什麽是哈夫曼樹的可以搜一下
具體操作:
(1)我們有一個集合,集合裏有一些數,升序排列
(2)每次選出兩個最小的數,然後合並,刪除,把新生成的數放到集合裏
(3)重復步驟2,直到用完所有的數,樹也就建好了,然後把左兒子定為0,右兒子定為1
(4)每個元素的哈夫曼編碼就是其路徑上的數
這樣說可能不太明白,我們還是舉個例子
現有一段文言文,要通過二進制哈夫曼編碼進行壓縮。簡單起見,假設這段文言文只由
4 個漢字“之”、“乎”、“者”、“也”組成,它們出現的次數分別為 700、600、300、
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
這同時也說明了,在集合中有重復的數時,哈夫曼編碼不止一種。
希望對大家有幫助
淺談哈夫曼編碼