1. 程式人生 > 其它 >霍夫曼 Huffman 編碼簡單瞭解

霍夫曼 Huffman 編碼簡單瞭解

霍夫曼編碼(也叫哈夫曼編碼)

即時碼:必須是唯一可譯碼,對一組即時碼來說,其中的任意一個碼字都只能與一種訊號存在對應關係,而且任意一個碼字都不能是其他碼字的字首。

即時碼的產生常採用樹形結構:

是用上邊的即時碼,

假設收到這樣一組訊號:100101001

則可以唯一解析出以下 4 個碼字:

1 001 01 001

編碼過程

  1. 設有一個影象序列,含有 8 個灰度級,$x1, x2, x3,,, x8$,概率分別為:
p1 p2 p3 p4 p5 p6 p7 p8
0.4 0.18 0.1 0.1 0.07 0.06 0.05 0.04
  1. 選取最小兩個概率進行合併,形成一個新的概率集合,重新進行排序。重複此步驟直到最終只剩兩個概率為止,得到霍夫曼樹
  1. 根據霍夫曼樹分配碼字,得到霍夫曼編碼

概率越大,碼長越短;概率越小,碼長越短

計算平均碼長:每一個霍夫曼碼長與它的概率乘積之和

這裡的平均碼長為 2.61,小於自然碼長為 3(表示 8 個數至少需要 3 位),說明進行了壓縮

計算熵、編碼效率

計算絕對冗餘、相對冗餘

總結

霍夫曼編碼是無失真編碼中效率較高的一種編碼方法。

在分配碼字過程中,隨機賦 “0” 和 “1” 的不同,結果會使碼字不同(不唯一),而碼字長和平均碼字長不會改變,他也是唯一可解碼的。

但其缺點是信源縮減過程複雜,運算量大。

解決辦法:(適應性 Huffman 編碼 ⭐⭐)https://blog.csdn.net/qq_28829853/article/details/104111533

  1. 使用多叉樹壓縮編碼長度,提高碼元攜帶的資訊
  2. 使用更少的字元來構建編碼表,調高字元的頻次
  3. 減少檔案頭部攜帶的資訊,提高編位元速率

對於 1.

改進後的霍夫曼編碼,不再是二進位制的。它可以是多進位制,例如26進位制。操作方法:
把符號按出現概率排序,合併概率最小的 26 項,為新的節點。然後重複這一過程,剩下的步驟與經典霍夫曼編碼相同。
應用:把漢語單字讀音的416音按26進位制進行霍夫曼編碼,結果,像de,shi,yu這些概率高的讀音分配了較短的編碼;dia,den這些不常用的讀音分配較長的編碼。26進位制對應鍵盤的26鍵,這樣就誕生了一種新的輸入法
原文連結:https://blog.csdn.net/proorck2019/article/details/109445764

參考:

沉舟側畔千帆過,病樹前頭萬木春。