建立正規化霍夫曼編碼

2021-09-29 07:29:15 字數 751 閱讀 3389

上文講述了利用二叉樹建立霍夫曼編碼。這種普通的霍夫曼編碼需要編碼端和解碼端都建立相同的二叉樹,這樣就會極大的減慢編譯碼速度,同時還要傳輸每個符號的頻度,進一步降低了壓縮的效率。而正規化霍夫曼編碼是可以不用建立二叉樹就可以直接編譯碼,而且只需要傳輸各符號的碼長即可,相當具有優點。

求取字元碼長可以使用堆排序的方式,演算法留待以後研究。現在直接利用前文中得到的編碼資訊如下:

g code is -->00

h code is -->10

d code is -->001

e code is -->101

a code is -->00011

b code is -->10011

c code is -->1011

f code is -->111

因此編碼長度分別如下表

碼長符號列表

2g,h

3d,e,f4c

5a,b

預設字元排序如下ab

cdef

gh01

2345

67根據規則相同碼長的符號,順序靠前的字元先編碼;不同碼長的字元,從最短的碼組開始編碼,最小值從0開始;每個碼組的首碼等於前乙個碼組的最後乙個編碼加一,然後乘以碼長差的二次冪。所以可手動列出8個字元的正規化霍夫曼編碼如下:

符號碼長編碼g

200h2

01d3100e3

101f

3110c4

1110a5

11110b5

11111

霍夫曼編碼

一 八卦 在 演算法為什麼這麼難?這篇部落格裡,劉未鵬講了乙個八卦 根據wikipedia的介紹,霍夫曼同學 當年還在讀ph.d,所以的確是 同學 而這個問題是坑爹的導師robert m.fano 給他們作為大作業的 fano自己和shannon合作給出了乙個suboptimal的編碼方案,為得不到...

霍夫曼編碼

給定乙個文字中出現的一組字元c,每個字元有其出現頻率freq,想構造字元的最優二進位制表示,即用來編碼整個文字的二進位制位最少 定長編碼 每個字元用相同長度的二進位制位數進行編碼,則每個字元的長度n必須滿足,2 n c 變長編碼 思想是賦予高頻字元短碼字,賦予低頻字元長碼字 編碼過程相對簡單,將表示...

霍夫曼編碼

霍夫曼編碼,或者也可以說哈夫曼編碼。它是一種編碼方式,是可變長編碼 vlc 的一種。準確來說,它是一種方法,什麼方法呢?這種方法,它完全依據字元出現的概率來構造異字頭的平均長度最短的碼字。哈夫曼編碼使用變成編碼表對源字元進行編碼,而這個變長編碼表是通過估算源字元出現的概率得到的。它有個特點,就是出現...