在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

一個經(jīng)典的壓縮算法Huffman算法

jqYd_gh_7579151 ? 來源:未知 ? 作者:李倩 ? 2018-09-05 14:50 ? 次閱讀

前兩天發(fā)布那個rsync算法后,想看看數(shù)據(jù)壓縮的算法,知道一個經(jīng)典的壓縮算法Huffman算法。相信大家應(yīng)該聽說過David Huffman和他的壓縮算法——Huffman Code,一種通過字符出現(xiàn)頻率,Priority Queue,和二叉樹來進(jìn)行的一種壓縮算法,這種二叉樹又叫Huffman二叉樹 —— 一種帶權(quán)重的樹。從學(xué)校畢業(yè)很長時間的我忘了這個算法,但是網(wǎng)上查了一下,中文社區(qū)內(nèi)好像沒有把這個算法說得很清楚的文章,尤其是樹的構(gòu)造,而正好看到一篇國外的文章《A Simple Example of Huffman Code on a String》,其中的例子淺顯易懂,相當(dāng)不錯,我就轉(zhuǎn)了過來。注意,我沒有對此文完全翻譯。

我們直接來看示例,如果我們需要來壓縮下面的字符串:

“beep boop beer!”

首先,我們先計算出每個字符出現(xiàn)的次數(shù),我們得到下面這樣一張表 :

然后,我把把這些東西放到Priority Queue中(用出現(xiàn)的次數(shù)據(jù)當(dāng) priority),我們可以看到,Priority Queue 是以Prioirry排序一個數(shù)組,如果Priority一樣,會使用出現(xiàn)的次序排序:下面是我們得到的Priority Queue:

接下來就是我們的算法——把這個PriorityQueue 轉(zhuǎn)成二叉樹。我們始終從queue的頭取兩個元素來構(gòu)造一個二叉樹(第一個元素是左結(jié)點(diǎn),第二個是右結(jié)點(diǎn)),并把這兩個元素的priority相加,并放回Priority中(再次注意,這里的Priority就是字符出現(xiàn)的次數(shù)),然后,我們得到下面的數(shù)據(jù)圖表:

同樣,我們再把前兩個取出來,形成一個Priority為2+2=4的結(jié)點(diǎn),然后再放回PriorityQueue中 :

繼續(xù)我們的算法(我們可以看到,這是一種自底向上的建樹的過程):

最終我們會得到下面這樣一棵二叉樹:

此時,我們把這個樹的左支編碼為0,右支編碼為1,這樣我們就可以遍歷這棵樹得到字符的編碼,比如:‘b’的編碼是 00,’p’的編碼是101, ‘r’的編碼是1000。我們可以看到出現(xiàn)頻率越多的會越在上層,編碼也越短,出現(xiàn)頻率越少的就越在下層,編碼也越長。

最終我們可以得到下面這張編碼表:

這里需要注意一點(diǎn),當(dāng)我們encode的時候,我們是按“bit”來encode,decode也是通過bit來完成,比如,如果我們有這樣的bitset “1011110111″ 那么其解碼后就是 “pepe”。所以,我們需要通過這個二叉樹建立我們Huffman編碼和解碼的字典表。

這里需要注意的一點(diǎn)是,我們的Huffman對各個字符的編碼是不會沖突的,也就是說,不會存在某一個編碼是另一個編碼的前綴,不然的話就會大問題了。因為encode后的編碼是沒有分隔符的。

于是,對于我們的原始字符串 beep boop beer!

其對就能的二進(jìn)制為 : 0110 0010 0110 0101 0110 0101 0111 0000 0010 0000 0110 0010 0110 1111 0110 1111 0111 0000 0010 0000 0110 0010 0110 0101 0110 0101 0111 0010 0010 0001

我們的Huffman的編碼為: 0011 1110 1011 0001 0010 1010 1100 1111 1000 1001

從上面的例子中,我們可以看到被壓縮的比例還是很可觀的。

編寫代碼實現(xiàn):實現(xiàn)結(jié)果與圖示結(jié)果不一樣的原因是次數(shù)出現(xiàn)了重復(fù)。

代碼CSDN下載地址:https://download.csdn.net/download/u013915688/10645042

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

    關(guān)注

    23

    文章

    4631

    瀏覽量

    93425
  • Huffman
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    6375

原文標(biāo)題:霍夫曼壓縮編輯算法講解最清楚的算法

文章出處:【微信號:gh_757915171cb5,微信公眾號:FPGA自學(xué)筆記】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    FPGA實現(xiàn)滑動平均濾波算法和LZW壓縮算法

    ,同時也可獲得較好的壓縮比和壓縮速度,具有定實用價值。【關(guān)鍵詞】:數(shù)據(jù)采集;;滑動平均濾波算法;;LZW;;FPGA【DOI】:CNKI:SUN:GWDZ.0.2010-02-029
    發(fā)表于 04-24 09:05

    語音壓縮算法研究

    希望廣大DSP大俠們幫我出出主意,怎么才能寫好的音頻壓縮算法,最好是在時域的壓縮。頻域的壓縮
    發(fā)表于 09-18 17:38

    數(shù)組壓縮算法

    需求:規(guī)定次波形顯示的數(shù)據(jù)時231點(diǎn)。算法要求:采集到的數(shù)值是可以確定的。10000點(diǎn)以內(nèi)的點(diǎn)數(shù)都壓縮成231
    發(fā)表于 06-09 17:35

    經(jīng)典算法大全(51C語言算法+單片機(jī)常用算法+機(jī)器學(xué)十大算法

    算法的描述:是對要解決問題或要完成項任務(wù)所采取的方法和步驟的描述,包括需要什么數(shù)據(jù)(輸入什么數(shù)據(jù)、輸出什么結(jié)果)、采用什么結(jié)構(gòu)、使用什么語句以及如何安排這些語句等。通常使用自然語
    發(fā)表于 10-23 14:31

    【案例分享】經(jīng)典壓縮算法Huffman算法

    前兩天發(fā)布那個rsync算法后,想看看數(shù)據(jù)壓縮算法,知道經(jīng)典
    發(fā)表于 07-17 04:30

    什么是壓縮算法呢?壓縮算法又是怎么定義的呢?

    認(rèn)識壓縮算法想必都有過壓縮和解壓縮文件的經(jīng)歷,當(dāng)文件太大時,我們會使用文件壓縮來降低文件的占用空間。比如微信上傳文件的限制是100MB,有
    發(fā)表于 07-28 07:22

    認(rèn)識壓縮算法

    壓縮算法認(rèn)識壓縮算法我們想必都有過壓縮和 解壓縮文件的經(jīng)歷,當(dāng)文件太大時,我們會使用文件
    發(fā)表于 07-28 08:12

    什么是壓縮算法

    什么是壓縮算法呢?壓縮算法又是怎么定義的呢?
    發(fā)表于 10-19 07:25

    壓縮算法是怎么定義的呢

    什么是壓縮算法呢?壓縮算法又是怎么定義的呢?文件是如何存儲的?
    發(fā)表于 10-19 07:01

    C語言經(jīng)典算法

    C語言經(jīng)典算法--助你解決算法問題C語言經(jīng)典算法
    發(fā)表于 03-23 14:30 ?28次下載

    經(jīng)典FPGA算法教材()

    經(jīng)典FPGA算法教材()
    發(fā)表于 01-18 20:35 ?92次下載

    基于0閾值的雙位圖壓縮_雙Huffman組合壓縮算法_許海英

    基于0閾值的雙位圖壓縮_雙Huffman組合壓縮算法_許海英
    發(fā)表于 03-19 11:31 ?0次下載

    JPEG圖像壓縮算法流程詳解

    。基本系統(tǒng)的JPEG壓縮編碼算法共分為11步驟:顏色模式轉(zhuǎn)換、采樣、分塊、離散余弦變換(DCT)、Zigzag 掃描排序、量化、DC系數(shù)的差分脈沖調(diào)制編碼、DC系數(shù)的中間格式計算、
    發(fā)表于 12-01 09:20 ?4.2w次閱讀
    JPEG圖像<b class='flag-5'>壓縮</b><b class='flag-5'>算法</b>流程詳解

    Huffman霍夫曼壓縮編碼算法實現(xiàn)分析

    哈夫曼編碼Huffman方法于1952年問世,迄今為止仍經(jīng)久不衰,廣泛應(yīng)用于各種數(shù)據(jù)壓縮技術(shù)中,且仍不失為熵編碼中的最佳編碼方法,deflate等壓縮算法也是結(jié)合了
    發(fā)表于 12-01 09:56 ?7018次閱讀

    Huffman壓縮算法概述和詳細(xì)流程

    Huffman壓縮算法種基于字符出現(xiàn)頻率的編碼算法,通過構(gòu)建Huffman樹,將出現(xiàn)頻率高的
    的頭像 發(fā)表于 10-21 13:48 ?339次閱讀
    主站蜘蛛池模板: 久久青青成人亚洲精品 | 国产拍拍拍精品视频 | 激情综合丁香 | 黄色性生活毛片 | 在线播放网址 | 色网站免费视频 | 欧洲人体超大胆露私视频 | 黄视频日本 | 三区在线观看 | 免费黄色福利视频 | 亚洲成a人片在线观看尤物 亚洲成a人片在线观看中 | 亚洲色图图片专区 | 被公侵犯肉体中文字幕一区二区 | 成人美女隐私免费 | 人人看人人干 | 色老头一区二区三区在线观看 | 天天天狠天天透天天制色 | 亚洲qingse | 午夜视频在线观看免费高清 | 日本午夜三级 | 手机在线电影你懂的 | 天天添天天射 | 丁香六月婷婷精品免费观看 | 全黄性色大片 | 天天干视频网站 | 婷五月综合 | 中文字幕一区在线观看视频 | 福利片午夜| 国产一卡二卡3卡4卡四卡在线 | 四虎永久免费在线观看 | 日本免费成人 | 人成电影免费观看在线 | 在线观看免费高清 | 欧美xxxxxxxxx | 婷婷久久综合九色综合九七 | 爱爱免费 | 欧美一级片在线免费观看 | аⅴ资源天堂8在线 | 男同小黄文 | 夜夜橹橹网站夜夜橹橹 | 成人午夜久久 |