霍夫曼編碼

2022-09-02 15:48:14 字數 659 閱讀 7316

霍夫曼編碼是可變字長編碼(vlc)的一種。 huffman於2023年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就稱huffman編碼。

霍夫曼編碼的具體方法:先按出現的概率大小排隊,把兩個最小的概率相加,作為新的概率 和剩餘的概率重新排隊,再把最小的兩個概率相加,再重新排隊,直到最後變成1。每次相加時都將「0」和「1」賦與相加的兩個概率,讀出時由該符號開始一直走到最後的「1」, 將路線上所遇到的「0」和「1」按最低位到最高位的順序排好,就是該符號的霍夫曼編碼。

這種編碼和定長編碼相比將出現概率較大的符號使用較少的碼字表示,節省空間。在實現上我們一般將huffman編碼表示為一棵二叉樹,其中的葉子表示被編碼的符號,樹中每個非葉節點代表乙個集合,其中包含這一節點之下的所有樹葉上的符號,除此之外,樹葉的每個符號還被賦予乙個概率,非葉節點的概率為位於它之下的所有葉節點的權重之和。

要找到乙個符號的huffman編碼,從樹根向下運動,在每個節點處判斷符號是在節點的左子樹還是右子樹,在左子樹則給編碼加上乙個0,在右子樹則給編碼加上乙個1,直到找到符號為止。

解碼的過程和編碼的過程剛好相反,是從一段由0和1構成的位序列開始。從樹根開始,通過位序列中的0或1確定是移向左子樹還是右子樹,每當到達乙個葉子,則解碼出來乙個符號,然後重新開始從樹根出發確定下乙個符號,直到解碼完所有的位序列。

霍夫曼編碼

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

霍夫曼編碼

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

霍夫曼編碼

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