霍夫曼編碼 ( Huffman coding ) 是一種可變長(zhǎng)的前綴碼?;舴蚵幋a使用的算法是 David A. Huffman 還是在MIT 的學(xué)生時(shí)提出的,并且在 1952 年發(fā)表了名為《 A Method for the Construction of Minimum-Redundancy Codes 》的文章。
編碼這種編碼的過程叫做霍夫曼編碼,它是一種普遍的熵編碼技術(shù),包括用于無損數(shù)據(jù)壓縮領(lǐng)域。
霍夫曼編碼過程
霍夫曼編碼使用一種特別的方法為信號(hào)源中的每個(gè)符號(hào)設(shè)定二進(jìn)制碼。出現(xiàn)頻率更大的符號(hào)將獲得更短的比特,出現(xiàn)頻率更小的符號(hào)將被分配更長(zhǎng)的比特,以此來提高數(shù)據(jù)壓縮率,提高傳輸效率。
以字符串 ” ABAABACD “ 為例進(jìn)行說明。
接下來,按照字符出現(xiàn)的比例從高往低對(duì)字符進(jìn)行排序。
圖 1
然后,按出現(xiàn)比例低的順序查找兩個(gè)字母。在這種情況下,它是 “ C ” 12.5% 和 “ D ” 12.5% 。
通過一條線連接兩個(gè)字母拼構(gòu)成一個(gè)樹狀結(jié)果。將兩個(gè)字母合并為 “ C 或 D”,并將出現(xiàn)比率相加起來。
動(dòng)畫 2
按照同樣的操作,將合并后的 “ C 或 D ” 視為一個(gè)字符,重復(fù)相同的操作。
在 “ A " "B" " C 或 D " 三個(gè)中,按照出現(xiàn)比例低的順序查找兩個(gè)字母。
圖 3
圖 4
這樣,所有的字母都變成了 " A 或 B 或 C 或 D" ,出現(xiàn)的比率為 100% 。
圖 4 就是霍夫曼編碼的樹結(jié)構(gòu)。
接下來再次顯示各個(gè)字母出現(xiàn)的比率,同時(shí)使用 0 和 1 進(jìn)行編碼,代碼 0 和 1 分別分配給上下延伸的分支。
圖 5
分配完畢后,從樹的根部遍歷每個(gè)字符并確定相應(yīng)的代碼。
在 " A " 的情況下,被分配的代碼為" 0 "
在 " B " 的情況下,被分配的代碼為 " 10 "
在 " C " 的情況下,被分配的代碼為 " 110 "
在 " D " 的情況下,被分配的代碼為 " 111 "
動(dòng)畫 6
就這樣,通過這樣的編碼規(guī)則, " ABAABACD " 的二進(jìn)制編碼就變成了 " 01000100110111 ",只需要 14 個(gè)比特就能表示,比單純的使用 2 比特表示一個(gè)字符縮短了很多。
-
算法
+關(guān)注
關(guān)注
23文章
4709瀏覽量
95354 -
編碼
+關(guān)注
關(guān)注
6文章
969瀏覽量
55759
原文標(biāo)題:算法科普:有趣的霍夫曼編碼
文章出處:【微信號(hào):TheAlgorithm,微信公眾號(hào):算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
磁性編碼器非線性誤差補(bǔ)償及在重型機(jī)床高精度伺服控制中應(yīng)用
醫(yī)療科普新助力!華為云 Flexus 數(shù)字人引領(lǐng)行業(yè)變革

信道編碼和信源編碼的區(qū)別
第二屆電力電子科普作品創(chuàng)作大賽斬獲殊榮——榮獲2024年全國(guó)科普日優(yōu)秀活動(dòng)表彰

bcd編碼的優(yōu)缺點(diǎn) bcd編碼的常見錯(cuò)誤
編碼器種類大觀:探索技術(shù)前沿與應(yīng)用創(chuàng)新
編碼器類型詳解:探索不同編碼技術(shù)的奧秘

增量編碼器與絕對(duì)值編碼器的區(qū)別

如何優(yōu)化base64編碼的性能
Huffman壓縮算法概述和詳細(xì)流程
磁電編碼器和光電編碼器的區(qū)別
科技少年夢(mèng) 科普粵海行|芯??萍?b class='flag-5'>科普基地啟迪智慧未來

評(píng)論