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

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

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

內(nèi)存和磁盤的關(guān)系&數(shù)據(jù)壓縮(下)

jf_78858299 ? 來源:前端柒八九 ? 作者:前端柒八九 ? 2023-03-31 16:21 ? 次閱讀

文件以字節(jié)位單位保存

文件是將數(shù)據(jù)存儲(chǔ)在磁盤等存儲(chǔ)媒介中的一種形式。程序文件中存儲(chǔ)數(shù)據(jù)的單位是 「字節(jié)」 。文件的大小之所以用xxKB、xxMB等來表示,就是因?yàn)槲募且宰止?jié)(B = Byte)為單位來存儲(chǔ)的。

?文件就是**「字節(jié)數(shù)據(jù)的集合」**

?

用1字節(jié)(=8位)表示的字節(jié)數(shù)據(jù)有256種,用二進(jìn)制數(shù)來表示的話,其范圍就是00000000~11111111。

  • 如果文件中存儲(chǔ)的數(shù)據(jù)是文字,那么該文件就是**「文本文件」**
  • 如果是圖形,那么該文件就是 「圖像文件」 。

?在任何情況下,文件中的字節(jié)數(shù)據(jù)都是 「連續(xù)存儲(chǔ)」 的。

?

圖片


RLE算法

我們來嘗試對存儲(chǔ)著AAAAAABBCDDEEEEEF這17個(gè) 「半角字符」 的文本文件進(jìn)行壓縮。

由于半角字母中, 「1個(gè)字符是作為1個(gè)字節(jié)」 的數(shù)據(jù)被保存在文件中的。因此,上述文件的大小就是17個(gè)字節(jié)。

我們可以采用將文件的內(nèi)容用 「字符 × 重復(fù)次數(shù)」 這樣的表現(xiàn)方式來壓縮。所以,AAAAAABBCDDEEEEEF就可以用A6B2C1D2E5F1來表示。而A6B2C1D2E5F1是12個(gè)字符,那么對應(yīng)的文本文件就變成了12字節(jié)。

12字節(jié)÷17字節(jié) ≈70%。也就是采用上述的方式,使得文件壓縮到原來大小的70%

圖片

把文件內(nèi)容用 「數(shù)據(jù) × 重復(fù)次數(shù)」 的形式來表示的壓縮方法稱為RLE(Run Length Encoding,行程長度編碼)算法

RLE算法的缺點(diǎn)

然而在實(shí)際的文本文件中,同樣字符多次重復(fù)出現(xiàn)的情況并不多見。雖然針對 「相同數(shù)據(jù)經(jīng)常連續(xù)出現(xiàn)」 的圖像、文件等,RLE算法可以發(fā)揮不錯(cuò),但是它并不適合文本文件的壓縮。


哈夫曼算法

「哈夫曼算法」 是哈夫曼與1952年提出來的壓縮算法。

針對,哈夫曼算法,首先要拋棄 「半角英文數(shù)字的1個(gè)字符是1個(gè)字節(jié)(8位)的數(shù)據(jù)」 這一概念。

文本文件是由不同類型的字符組合而成的,而且不同的字符出現(xiàn)的次數(shù)也是不同的。例如,在某一個(gè)文本文件中,A出現(xiàn)了100次,Q出現(xiàn)了3次。

? 「哈夫曼算法」 的關(guān)鍵就在于 「多次出現(xiàn)的數(shù)據(jù)用小于8位的字節(jié)數(shù)來表示,不常用的數(shù)據(jù)則用超過8位的字節(jié)數(shù)來表示」 。

?

當(dāng)AQ都用8位來表示時(shí),原文件的大小就是100次 × 8位 + 3次 × 8位 = 824位,而假設(shè)A用2位,Q用10位表示,壓縮后的大小就是100次 × 2位 + 3次 × 10位 = 230位。

不過,有一點(diǎn)需要注意,

?不管是不滿8位的數(shù)據(jù),還是超過8位的數(shù)據(jù),最終都要 「以8位為單位保存到文件中」

?

這是因?yàn)榇疟P是以字節(jié)(8位)為單位來保存數(shù)據(jù)的。

圖片

用二叉樹實(shí)現(xiàn)哈夫曼編碼

哈夫曼算法是指,為 「各壓縮對象文件」 分別構(gòu)造最佳的編碼體系,并以該編碼體系為基礎(chǔ)來進(jìn)行壓縮。因此,用什么樣的編碼(哈夫曼編碼)對數(shù)據(jù)進(jìn)行分割,就要由各個(gè)文件而定。

用哈夫曼算法壓縮過的文件中,存儲(chǔ)著哈夫曼編碼信息和壓縮過的數(shù)據(jù)。

圖片

在哈夫曼算法中,通過借助 「哈夫曼樹」 構(gòu)造編碼體系,即使在不使用字符區(qū)分符號的情況下,也可以構(gòu)建能夠明確進(jìn)行區(qū)分的編碼體系。也就是說,利用哈夫曼樹后,就算表示各字符的數(shù)據(jù) 「位數(shù)」 不同,也能夠做成明確區(qū)分的編碼。

制作哈夫曼樹

自然界的樹是從根開始生枝長葉,而哈夫曼樹是 「從葉生枝,然后再生根」

圖片

哈夫曼算法能夠大幅度提升壓縮比率

使用哈夫曼樹后,出現(xiàn) 「頻率越高的數(shù)據(jù)所占用的數(shù)據(jù)位數(shù)就越少」 ,而且數(shù)據(jù)的區(qū)分也可以很清晰的實(shí)現(xiàn)。


可逆壓縮和非可逆壓縮

  • 「可逆壓縮」 :能還原到壓縮前狀態(tài)的壓縮
  • 「非可逆壓縮」 :無法還原到壓縮前狀態(tài)的壓縮

圖片

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

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209465
  • 計(jì)算機(jī)
    +關(guān)注

    關(guān)注

    19

    文章

    7175

    瀏覽量

    87175
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2241

    瀏覽量

    93984
收藏 人收藏

    評論

    相關(guān)推薦

    【TL6748 DSP申請】井下數(shù)據(jù)壓縮技術(shù)

    申請理由:我是中石油渤海鉆探工程公司定向井分公司的儀器工程師,目前我在研發(fā)一項(xiàng)科研項(xiàng)目,主要是關(guān)于數(shù)據(jù)壓縮算法以及數(shù)據(jù)編解碼方面技術(shù)研究。需要利用數(shù)據(jù)處理芯片來實(shí)現(xiàn)井下數(shù)據(jù)壓縮及編解碼
    發(fā)表于 09-10 11:09

    請問有沒有32可用的數(shù)據(jù)壓縮算法?

    了40M大小,手賤用rar壓縮了一,3.2M!??!,為了傳輸這40M的數(shù)據(jù)更改了工具的波特率和buffer,這樣就和公司老產(chǎn)品不兼容了,如果STM32上能實(shí)現(xiàn)類似rar的數(shù)據(jù)壓縮算法
    發(fā)表于 12-19 08:57

    MapReduce數(shù)據(jù)壓縮的基本原則

    黑猴子的家:MapReduce數(shù)據(jù)壓縮
    發(fā)表于 05-24 12:45

    【ELT.ZIP】OpenHarmony啃論文俱樂部——多層存儲(chǔ)分級數(shù)據(jù)壓縮

    層次速度更快,但容量更?。粶p少數(shù)據(jù)量最常用的是數(shù)據(jù)壓縮,在合適的場景和環(huán)境匹配對應(yīng)的壓縮技術(shù)是尤其需要關(guān)注的。自然而然地,我們就會(huì)聯(lián)想到:如果二者同時(shí)進(jìn)行,不就可以相互受益了嗎?
    發(fā)表于 07-23 13:20

    【學(xué)習(xí)打卡】【ELT.ZIP】OpenHarmony啃論文俱樂部——多層存儲(chǔ)分級數(shù)據(jù)壓縮

    層次速度更快,但容量更小);減少數(shù)據(jù)量最常用的是數(shù)據(jù)壓縮,在合適的場景和環(huán)境匹配對應(yīng)的壓縮技術(shù)是尤其需要關(guān)注的。自然而然地,我們就會(huì)聯(lián)想到:如果二者同時(shí)進(jìn)行,不就可以相互受益了嗎?
    發(fā)表于 07-23 13:26

    數(shù)據(jù)壓縮技術(shù)

    一、數(shù)據(jù)壓縮的必要性二、多媒體數(shù)據(jù)壓縮的可能性三、壓縮方案應(yīng)滿足的要求四、編碼方案分類五、數(shù)據(jù)壓縮(編碼)的主要步驟六、一些基本的壓縮技術(shù)七
    發(fā)表于 03-25 13:19 ?35次下載

    傳真機(jī)的數(shù)據(jù)壓縮系統(tǒng)

    傳真機(jī)的數(shù)據(jù)壓縮系統(tǒng)         
    發(fā)表于 12-29 16:51 ?629次閱讀

    JPEG2000數(shù)據(jù)壓縮的FPGA實(shí)現(xiàn)

    高性能的數(shù)據(jù)壓縮可以有效的減少數(shù)據(jù)對存儲(chǔ)空間和通信帶寬的要求,降低通信成本。為解決圖像數(shù)據(jù)的高壓縮性能問題,本文提出了基于JPEG2000標(biāo)準(zhǔn)的數(shù)據(jù)
    發(fā)表于 04-16 10:39 ?47次下載
    JPEG2000<b class='flag-5'>數(shù)據(jù)壓縮</b>的FPGA實(shí)現(xiàn)

    JAVA教程之數(shù)據(jù)壓縮與傳輸

    JAVA教程之數(shù)據(jù)壓縮與傳輸,很好的JAVA的資料,快來學(xué)習(xí)吧
    發(fā)表于 04-11 17:28 ?10次下載

    小波算法在監(jiān)測數(shù)據(jù)壓縮中的應(yīng)用

    小波算法在監(jiān)測數(shù)據(jù)壓縮中的應(yīng)用
    發(fā)表于 02-07 18:22 ?16次下載

    數(shù)據(jù)壓縮的重要性

    數(shù)據(jù)壓縮是指在不丟失有用信息的前提下,縮減數(shù)據(jù)量以減少存儲(chǔ)空間,提高其傳輸、存儲(chǔ)和處理效率,或按照一定的算法對數(shù)據(jù)進(jìn)行重新組織,減少數(shù)據(jù)的冗余和存儲(chǔ)的空間的一種技術(shù)方法。
    的頭像 發(fā)表于 02-28 10:45 ?1.4w次閱讀

    數(shù)據(jù)壓縮算法計(jì)算步驟及過程

    一種非常簡單的壓縮方法是行程長度編碼,這種方法使用數(shù)據(jù)數(shù)據(jù)長度這樣簡單的編碼代替同樣的連續(xù)數(shù)據(jù),這是無損數(shù)據(jù)壓縮的一個(gè)實(shí)例。這種方法經(jīng)常用
    的頭像 發(fā)表于 02-28 10:51 ?1.2w次閱讀
    <b class='flag-5'>數(shù)據(jù)壓縮</b>算法計(jì)算步驟及過程

    有趣!史記:數(shù)據(jù)壓縮算法列傳

    簡單地說,如果沒有數(shù)據(jù)壓縮技術(shù),我們就沒法用 WinRAR 為 Email 中的附件瘦身;如果沒有數(shù)據(jù)壓縮技術(shù),市場上的數(shù)碼錄音筆就只能記錄不到20 分鐘的語音;如果沒有數(shù)據(jù)壓縮技術(shù)
    的頭像 發(fā)表于 11-11 15:21 ?670次閱讀

    內(nèi)存磁盤關(guān)系&amp;amp;數(shù)據(jù)壓縮(上)

    計(jì)算機(jī)中主要的存儲(chǔ)部分是 「內(nèi)存」 和 「磁盤」 。 「磁盤中存儲(chǔ)的程序,必須要加載到內(nèi)存后才能運(yùn)行。在磁盤中保存的原始程序是無法直接運(yùn)行的
    的頭像 發(fā)表于 03-31 16:21 ?1146次閱讀
    <b class='flag-5'>內(nèi)存</b>和<b class='flag-5'>磁盤</b>的<b class='flag-5'>關(guān)系</b>&<b class='flag-5'>amp</b>;<b class='flag-5'>amp</b>;<b class='flag-5'>數(shù)據(jù)壓縮</b>(上)

    高性能無損數(shù)據(jù)壓縮FPGA IP,LZO無損數(shù)據(jù)壓縮IP

    LZOAccel-C是一個(gè)無損數(shù)據(jù)壓縮引擎的FPGA硬件實(shí)現(xiàn),兼容LZO 2.10標(biāo)準(zhǔn)。 Core接收未壓縮的輸入數(shù)據(jù)塊,產(chǎn)生壓縮后的數(shù)據(jù)
    的頭像 發(fā)表于 01-25 13:39 ?375次閱讀
    高性能無損<b class='flag-5'>數(shù)據(jù)壓縮</b>FPGA IP,LZO無損<b class='flag-5'>數(shù)據(jù)壓縮</b>IP