霍夫曼編碼 ( Huffman coding ) 是一種可變長的前綴碼。霍夫曼編碼使用的算法是 David A. Huffman 仍是在MIT 的學生時提出的,而且在 1952 年發表了名爲《 A Method for the Construction of Minimum-Redundancy Codes 》的文章。算法
編碼這種編碼的過程叫作霍夫曼編碼,它是一種廣泛的熵編碼技術,包括用於無損數據壓縮領域。動畫
霍夫曼編碼使用一種特別的方法爲信號源中的每一個符號設定二進制碼。出現頻率更大的符號將得到更短的比特,出現頻率更小的符號將被分配更長的比特,以此來提升數據壓縮率,提升傳輸效率。編碼
以字符串 」 ABAABACD 「 爲例進行說明。cdn
接下來,按照字符出現的比例從高往低對字符進行排序。blog
而後,按出現比例低的順序查找兩個字母。在這種狀況下,它是 「 C 」 12.5% 和 「 D 」 12.5% 。排序
經過一條線鏈接兩個字母拼構成一個樹狀結果。將兩個字母合併爲 「 C 或 D」,並將出現比率相加起來。字符串
按照一樣的操做,將合併後的 「 C 或 D 」 視爲一個字符,重複相同的操做。it
在 「 A " "B" " C 或 D " 三個中,按照出現比例低的順序查找兩個字母。io
這樣,全部的字母都變成了" A 或 B 或 C 或 D" ,出現的比率爲 100% 。class
圖 4 就是霍夫曼編碼的樹結構。
接下來再次顯示各個字母出現的比率,同時使用 0 和 1 進行編碼,代碼 0 和 1 分別分配給上下延伸的分支。
分配完畢後,從樹的根部遍歷每一個字符並肯定相應的代碼。
就這樣,經過這樣的編碼規則, 」 ABAABACD 「 的二進制編碼就變成了 」 01000100110111 「,只須要 14 個比特就能表示,比單純的使用 2 比特表示一個字符縮短了不少。