上文講述了利用二叉樹建立霍夫曼編碼。這種普通的霍夫曼編碼需要編碼端和解碼端都建立相同的二叉樹,這樣就會極大的減慢編譯碼速度,同時還要傳輸每個符號的頻度,進一步降低了壓縮的效率。而正規化霍夫曼編碼是可以不用建立二叉樹就可以直接編譯碼,而且只需要傳輸各符號的碼長即可,相當具有優點。
求取字元碼長可以使用堆排序的方式,演算法留待以後研究。現在直接利用前文中得到的編碼資訊如下:
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 的一種。準確來說,它是一種方法,什麼方法呢?這種方法,它完全依據字元出現的概率來構造異字頭的平均長度最短的碼字。哈夫曼編碼使用變成編碼表對源字元進行編碼,而這個變長編碼表是通過估算源字元出現的概率得到的。它有個特點,就是出現...