概念
哈夫曼編碼(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%