0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

算法科普:有趣的霍夫曼編碼

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:楊湘祁 ? 作者:電子發(fā)燒友 ? 2019-03-14 19:24 ? 次閱讀

霍夫曼編碼 ( Huffman coding ) 是一種可變長的前綴碼?;舴蚵幋a使用的算法是 David A. Huffman 還是在MIT 的學生時提出的,并且在 1952 年發(fā)表了名為《 A Method for the Construction of Minimum-Redundancy Codes 》的文章。

編碼這種編碼的過程叫做霍夫曼編碼,它是一種普遍的熵編碼技術(shù),包括用于無損數(shù)據(jù)壓縮領(lǐng)域。

霍夫曼編碼過程

霍夫曼編碼使用一種特別的方法為信號源中的每個符號設(shè)定二進制碼。出現(xiàn)頻率更大的符號將獲得更短的比特,出現(xiàn)頻率更小的符號將被分配更長的比特,以此來提高數(shù)據(jù)壓縮率,提高傳輸效率。

以字符串 ” ABAABACD “ 為例進行說明。

接下來,按照字符出現(xiàn)的比例從高往低對字符進行排序。

圖 1

然后,按出現(xiàn)比例低的順序查找兩個字母。在這種情況下,它是 “ C ” 12.5% 和 “ D ” 12.5% 。

通過一條線連接兩個字母拼構(gòu)成一個樹狀結(jié)果。將兩個字母合并為 “ C 或 D”,并將出現(xiàn)比率相加起來。

動畫 2

按照同樣的操作,將合并后的 “ C 或 D ” 視為一個字符,重復相同的操作。

在 “ A " "B" " C 或 D " 三個中,按照出現(xiàn)比例低的順序查找兩個字母。

圖 3

圖 4

這樣,所有的字母都變成了 " A 或 B 或 C 或 D" ,出現(xiàn)的比率為 100% 。

圖 4 就是霍夫曼編碼的樹結(jié)構(gòu)。

接下來再次顯示各個字母出現(xiàn)的比率,同時使用 0 和 1 進行編碼,代碼 0 和 1 分別分配給上下延伸的分支。

圖 5

分配完畢后,從樹的根部遍歷每個字符并確定相應的代碼。

在 " A " 的情況下,被分配的代碼為" 0 "

在 " B " 的情況下,被分配的代碼為 " 10 "

在 " C " 的情況下,被分配的代碼為 " 110 "

在 " D " 的情況下,被分配的代碼為 " 111 "

動畫 6

就這樣,通過這樣的編碼規(guī)則, " ABAABACD " 的二進制編碼就變成了 " 01000100110111 ",只需要 14 個比特就能表示,比單純的使用 2 比特表示一個字符縮短了很多。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4580

    瀏覽量

    92361
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    921

    瀏覽量

    54714

原文標題:算法科普:有趣的霍夫曼編碼

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Huffman壓縮算法概述和詳細流程

    Huffman壓縮算法是一種基于字符出現(xiàn)頻率的編碼算法,通過構(gòu)建Huffman樹,將出現(xiàn)頻率高的字符用短編碼表示,出現(xiàn)頻率低的字符用長編碼
    的頭像 發(fā)表于 10-21 13:48 ?80次閱讀

    短文6:關(guān)于功率因素的有趣問答

    2個關(guān)于功率因素的有趣問答。
    的頭像 發(fā)表于 09-23 12:22 ?124次閱讀

    科普EEPROM 科普 EVASH Ultra EEPROM?科普存儲芯片

    科普EEPROM 科普 EVASH Ultra EEPROM?科普存儲芯片
    的頭像 發(fā)表于 06-25 17:14 ?438次閱讀

    電感科普篇:電感的特性有哪些?

    電感科普篇:電感的特性有哪些?
    的頭像 發(fā)表于 06-16 10:31 ?619次閱讀

    【RTC程序設(shè)計:實時音視頻權(quán)威指南】音視頻的編解碼壓縮技術(shù)

    音視頻所載有的信息在通過傳輸?shù)臅r候就需要壓縮編碼。 其中,文本壓縮是指通過使用各種算法和技術(shù),將文本數(shù)據(jù)表示為更緊湊的形式,以減少存儲空間。 霍夫曼編碼是一種無損壓縮
    發(fā)表于 04-28 21:04

    FPGA壓縮算法有哪些

    在圖像壓縮算法中可以采用哈夫曼編碼的方式對編碼冗余的信息進行壓縮,可以采用預測的方式來減少像素間冗余,可以采用量化的方式完成心理視覺冗余信息的去除
    的頭像 發(fā)表于 04-15 11:48 ?517次閱讀
    FPGA壓縮<b class='flag-5'>算法</b>有哪些

    開關(guān)電源短路的測試方法科普

    開關(guān)電源是否短路可以用電流表、萬用表和示波器進行檢測。如果發(fā)現(xiàn)開關(guān)電源短路,要及時排查造成短路的因素,并及時修復或更換,解決短路問題。
    的頭像 發(fā)表于 03-07 16:14 ?1788次閱讀

    哈夫曼編碼怎么算 哈夫曼編碼左邊是0還是1

    哈夫曼編碼是一種基于頻率的變長編碼方式,常用于數(shù)據(jù)壓縮和信息傳輸領(lǐng)域。它是由美國數(shù)學家大衛(wèi)·哈夫曼在1952年發(fā)明的,被廣泛應用于無損壓縮領(lǐng)域。 哈夫曼編碼算法的基本思想是根據(jù)字符出現(xiàn)
    的頭像 發(fā)表于 01-30 11:27 ?2261次閱讀

    科普小貼士】什么是pn結(jié)?

    科普小貼士】什么是pn結(jié)?
    的頭像 發(fā)表于 12-13 15:06 ?2296次閱讀
    【<b class='flag-5'>科普</b>小貼士】什么是pn結(jié)?

    科普小貼士】BJT和MOSFET的差異

    科普小貼士】BJT和MOSFET的差異
    的頭像 發(fā)表于 12-13 14:21 ?991次閱讀
    【<b class='flag-5'>科普</b>小貼士】BJT和MOSFET的差異

    科普小貼士】什么是光耦?

    科普小貼士】什么是光耦?
    的頭像 發(fā)表于 12-08 17:06 ?585次閱讀
    【<b class='flag-5'>科普</b>小貼士】什么是光耦?

    科普】什么是晶圓級封裝

    科普】什么是晶圓級封裝
    的頭像 發(fā)表于 12-07 11:34 ?1396次閱讀
    【<b class='flag-5'>科普</b>】什么是晶圓級封裝

    信息編碼技術(shù)詳解

    前面介紹過,調(diào)制解調(diào)之前還需要編碼,但編碼根據(jù)用途來分有信源編碼與信道編碼。本編的主要內(nèi)容是介紹幾種信源編碼技術(shù),需要注意的是用于信源
    的頭像 發(fā)表于 11-27 10:05 ?579次閱讀
    信息<b class='flag-5'>編碼</b>技術(shù)詳解

    有趣的光耦振蕩器

    有趣的光耦振蕩器
    的頭像 發(fā)表于 11-23 09:09 ?807次閱讀
    <b class='flag-5'>有趣</b>的光耦振蕩器

    如何測試開關(guān)電源的下降時間呢?

    繼開關(guān)電源上升時間測試方法科普后,納米軟件將繼續(xù)介紹下降時間的測試方法。
    的頭像 發(fā)表于 11-07 12:44 ?693次閱讀
    如何測試開關(guān)電源的下降時間呢?