哈夫曼編碼


概念

  哈夫曼編碼(Huffman Coding),又稱霍夫曼編碼,是一種編碼方式,可變字長編碼(VLC)的一種。Huffman於1952年提出一種編碼方法,該方法完全依據字符出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做Huffman編碼(有時也稱為霍夫曼編碼)。

  哈夫曼編碼,主要目的是根據使用頻率來最大化節省字符(編碼)的存儲空間。霍夫曼編碼是一種無前綴編碼。解碼時不會混淆。其主要應用在數據壓縮,加密解密等場合。如果考慮到進一步節省存儲空間,就應該將出現概率大(占比多)的字符用盡量少的0-1進行編碼,也就是更靠近根(節點少),這也就是最優二叉樹-哈夫曼樹。

例題

  有A,B,C,D,E五個字符,出現的頻率(即權值)分別為5,4,3,2,1,求這5個字符的哈夫曼編碼,及壓縮率。

解析

第一步先取兩個最小權值作為左右子樹構造一個新樹,即取1,2構成新樹,其結點為1+2=3,3為生成的新節點,如圖:

第二步再把新生成的權值為3的結點放到剩下的集合中,所以集合變成{5,4,3,3},再根據第二步,取最小的兩個權值構成新樹,如圖:

 再依次建立哈夫曼樹,得到最終哈夫曼樹,如圖:

各個權值替換對應的字符,如下圖:

最終可以得出:

各字符對應的編碼為:A->11,B->10,C->00,D->011,E->010

此文檔(字符域)最終用三位二進行數進行的等長編碼,平均長度為3

壓縮率為(約等於):1  - (2 * 5 + 2 * 4 + 2 * 3 + 3 * 2 + 3 * 1 )/(3 * 15)= 25%


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM