1.1 什么是霍夫曼編碼
在計算機中,霍夫曼編碼使用變長編碼表對源符號(如文件中的一個字母)進行編碼,其中變長編碼表是通過一種評估來源符號出現幾率的方法得到的,出現幾率高的字母使用較短的編碼,反之出現幾率低的則使用較長的編碼,這便使編碼之后的字符串的平均長度、期望值降低,從而達到無損壓縮數據的目的。
1.2 編碼步驟
- 初始化,將符號概率按大到小進行排序;
- 將最小的兩個符號組成一個新的符號,新符號的概率即為兩者之和;
- 重復2,直到形成一個符號,其概率為1。
- 編碼:從根開始向下,左分支0;右分支1。(或左分支1;右分支0)
1.3 舉例
最后形成的編碼:
符號 | a1 | a2 | a3 | a4 | a5 | a6 | a7 | a8 |
---|---|---|---|---|---|---|---|---|
碼字 | 00 | 01 | 100 | 101 | 110 | 1110 | 11110 | 11111 |
碼長 | 2 | 2 | 3 | 3 | 3 | 4 | 5 | 5 |
平均碼長:$$L=\sum_{i=1}^{8}P(a_i)*l_i=2.73\ bit$$
信息熵:$$H(A)=-\sum_{i=1}^{8}P(a_i)*log_2P(a_i)=2.618\ bit$$
可以看出挺接近信息熵的了。
1.4 霍夫曼編碼的特點
-
形成的編碼可能不是唯一的,左0右1還是左1右0隨便。
-
對於信源概率相差大時,效率較高,當信源概率為 \(2^{-1},2^{-2}\dots\) 時,效率最高。
-
對於信源概率相等時,效率最低。
-
編碼后,形成霍夫曼編碼表,解碼時需參照此表,此表在存儲和傳輸時都會占用一定的信道。