哈夫曼編碼(Huffman Coding),又稱霍夫曼編碼,是一種編碼方式,可變字長編碼(VLC)的一種。Huffman於1952年提出一種編碼方法,該方法徹底依據字符出現機率來構造異字頭的平均長度最短的碼字,有時稱之爲最佳編碼,通常就叫作Huffman編碼(有時也稱爲霍夫曼編碼)。編碼
哈夫曼編碼,主要目的是根據使用頻率來最大化節省字符(編碼)的存儲空間。加密
簡易的理解就是,假如我有A,B,C,D,E五個字符,出現的頻率(即權值)分別爲5,4,3,2,1,那麼咱們第一步先取兩個最小權值做爲左右子樹構造一個新樹,即取1,2構成新樹,其結點爲1+2=3,如圖:blog
虛線爲新生成的結點,第二步再把新生成的權值爲3的結點放到剩下的集合中,因此集合變成{5,4,3,3},再根據第二步,取最小的兩個權值構成新樹,如圖:二叉樹
再依次創建哈夫曼樹,以下圖:加密解密
其中各個權值替換對應的字符即爲下圖:方法
因此各字符對應的編碼爲:A->11,B->10,C->00,D->011,E->010im
霍夫曼編碼是一種無前綴編碼。解碼時不會混淆。其主要應用在數據壓縮,加密解密等場合。d3
若是考慮到進一步節省存儲空間,就應該將出現機率大(佔比多)的字符用盡可能少的0-1進行編碼,也就是更靠近根(節點少),這也就是最優二叉樹-哈夫曼樹。數據