在計算機中,霍夫曼編碼使用變長編碼表對源符號(如檔案中的乙個字母)進行編碼,其中變長編碼表是通過一種評估**符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則使用較長的編碼,這便使編碼之後的字串的平均長度、期望值降低,從而達到無失真壓縮資料的目的。
初始化,將符號概率按大到小進行排序;
將最小的兩個符號組成乙個新的符號,新符號的概率即為兩者之和;
重複2,直到形成乙個符號,其概率為1。
編碼:從根開始向下,左分支0;右分支1。(或左分支1;右分支0)
最後形成的編碼:
符號a1
a2a3
a4a5
a6a7
a8碼字
0001
100101
1101110
11110
11111
碼長22
3334
55平均碼長:$$l=\sum_^p(a_i)*l_i=2.73\ bit$$
資訊熵:$$h(a)=-\sum_^p(a_i)*log_2p(a_i)=2.618\ bit$$
可以看出挺接近資訊熵的了。
形成的編碼可能不是唯一的,左0右1還是左1右0隨便。
對於信源概率相差大時,效率較高,當信源概率為 \(2^,2^\dots\) 時,效率最高。
對於信源概率相等時,效率最低。
編碼後,形成霍夫曼編碼表,解碼時需參照此表,此表在儲存和傳輸時都會占用一定的通道。
基於實現霍夫曼編碼的無失真壓縮 C 實現
1 把任務十中的文字字元轉為國標碼,計算共需要多少位元。2 用你所學的方法 霍夫曼編碼 遊長編碼或算數編碼 壓縮這些字元,得到的壓縮碼流共計多少位元。說明資料的冗餘度在 3 手動編碼也可以。最好程式設計實現壓縮。1 漢字機內碼 區位碼 國標碼簡介 漢字的機內碼是漢字在計算機漢字系統內部的表示方法,是...
2020編碼大賽(3)無失真壓縮演算法
無失真壓縮演算法,按照我的理解,可以分為三大塊知識 直接編碼 轉換 上下文編碼。一,直接編碼 1,哈夫曼編碼 哈夫曼編碼就是把各個字元轉換成不同長度的01串,按照固定的替換規則全文替換即可。當然,哈夫曼編碼的依據,可以是硬編碼的,也可以是根據文字內容統計計算出來的。2,算術編碼 區間編碼 這2個編碼...
霍夫曼編碼及檔案壓縮
以字串 this is a test 為例,生成霍夫曼編碼的步驟如下 計算各字元的權重,這裡直接用字元出現的次數表示。t 3 h 1i 2 s 3 space 3 a 1e 1 根據各字元的權重生成霍夫曼樹 14 8 t 3 5 i 2 3 h 1 2 e 1 a 1 6 space 3 s 3 根...