01 霍夫曼編碼 無失真壓縮

2022-06-28 01:21:12 字數 906 閱讀 4854

​ 在計算機中,霍夫曼編碼使用變長編碼表對源符號(如檔案中的乙個字母)進行編碼,其中變長編碼表是通過一種評估**符號出現機率的方法得到的,出現機率高的字母使用較短的編碼,反之出現機率低的則使用較長的編碼,這便使編碼之後的字串的平均長度、期望值降低,從而達到無失真壓縮資料的目的。

初始化,將符號概率按大到小進行排序;

將最小的兩個符號組成乙個新的符號,新符號的概率即為兩者之和;

重複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 根...