青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

幾種壓縮算法原理介紹(轉(zhuǎn))

RLE

RLE 又叫 Run Length Encoding ,是一個針對無損壓縮的非常簡單的算法。它用重復(fù)字節(jié)和重復(fù)的次數(shù)來簡單描述來代替重復(fù)的字節(jié)。盡管簡單并且對于通常的壓縮非常低效,但它有的時候卻非常有用(例如, JPEG 就使用它)。

1.1. 原理

2.1 顯示了一個如何使用 RLE 算法來對一個數(shù)據(jù)流編碼的例子,其中出現(xiàn)六次的符號‘ 93 ’已經(jīng)用 3 個字節(jié)來代替:一個標(biāo)記字節(jié)(‘ 0 ’在本例中)重復(fù)的次數(shù)(‘ 6 ’)和符號本身(‘ 93 ’)。

RLE 解碼器遇到符號‘ 0 的時候,它表明后面的兩個字節(jié)決定了需要輸出哪個符號以及輸出多少次。

1.2. 實(shí)現(xiàn)

RLE 可以使用很多不同的方法?;緣嚎s庫中詳細(xì)實(shí)現(xiàn)的方式是非常有效的一個。一個特殊的標(biāo)記字節(jié)用來指示重復(fù)節(jié)的開始,而不是對于重復(fù)非重復(fù)節(jié)都 coding run 。

因此非重復(fù)節(jié)可以有任意長度而不被控制字節(jié)打斷,除非指定的標(biāo)記字節(jié)出現(xiàn)在非重復(fù)節(jié)(頂多以兩個字節(jié)來編碼)的稀有情況下。為了最優(yōu)化效率,標(biāo)記字節(jié)應(yīng)該是輸入流中最少出現(xiàn)的符號(或許就不存在)。

重復(fù) runs 能夠在 32768 字節(jié)的時候運(yùn)轉(zhuǎn)。少于 129 字節(jié)的要求 3 個字節(jié)編碼(標(biāo)記 + 次數(shù) + 符號),而大雨 128 字節(jié)要求四個字節(jié)(標(biāo)記 + 次數(shù)的高 4 |0x80+ 次數(shù)的低 4 位)。這是通常所有采用的壓縮的做法,并且也是相比較三個字節(jié)固定編碼(允許使用 3 個字節(jié)來編碼 256 個字節(jié))而言非常少見的有損壓縮率的方法。

在這種模式下,最壞的壓縮結(jié)果是:

輸出大小 =257/256* 輸入大小 +1

2.   哈夫曼

哈夫曼編碼是無損壓縮當(dāng)中最好的方法。它使用預(yù)先二進(jìn)制描述來替換每個符號,長度由特殊符號出現(xiàn)的頻率決定。常見的符號需要很少的位來表示,而不常見的符號需要很多為來表示。

哈夫曼算法在改變?nèi)魏畏柖M(jìn)制編碼引起少量密集表現(xiàn)方面是最佳的。然而,它并不處理符號的順序和重復(fù)或序號的序列。

2.1. 原理

我不打算探究哈夫曼編碼的所有實(shí)際的細(xì)節(jié),但基本的原理是為每個符號找到新的二進(jìn)制表示,從而通常符號使用很少的位,不常見的符號使用較多的位。

簡短的說,這個問題的解決方案是為了查找每個符號的通用程度,我們建立一個未壓縮數(shù)據(jù)的柱狀圖;通過遞歸拆分這個柱狀圖為兩部分來創(chuàng)建一個二叉樹,每個遞歸的一半應(yīng)該和另一半具有同樣的權(quán)(權(quán)是 N K =1 符號數(shù) k , N 是分之中符號的數(shù)量,符號數(shù) k 是符號 k 出現(xiàn)的次數(shù)

這棵樹有兩個目的:

1.  編碼器使用這棵樹來找到每個符號最優(yōu)的表示方法

2.  解碼器使用這棵樹唯一的標(biāo)識在壓縮流中每個編碼的開始和結(jié)束,其通過在讀壓縮數(shù)據(jù)位的時候自頂向底的遍歷樹,選擇基于數(shù)據(jù)流中的每個獨(dú)立位的分支,一旦一個到達(dá)葉子節(jié)點(diǎn),解碼器知道一個完整的編碼已經(jīng)讀出來了。

我們來看一個例子會讓我們更清楚。圖 2.2 顯示了一個 10 個字節(jié)的未壓縮的數(shù)據(jù)。

根據(jù)符號頻率,哈夫曼編碼器生成哈夫曼樹(圖 2.4 )和相應(yīng)的編碼表示(圖 2.3 )。

 

 

 

 

 

 

你可以看到,常見的符號接近根,因此只要少數(shù)位來表示。于是最終的壓縮數(shù)據(jù)流如圖 2.5 所示。

壓縮后的數(shù)據(jù)流是 24 位(三個字節(jié)),原來是 80 位( 10 個字節(jié))。當(dāng)然,我應(yīng)該存儲哈夫曼樹,這樣解碼器就能夠解碼出對應(yīng)的壓縮流了,這就使得該例子中的真正數(shù)據(jù)流比輸入的流數(shù)據(jù)量大。這是相對較短的數(shù)據(jù)上的副作用。對于大數(shù)據(jù)量來說,上面的哈夫曼樹就不占太多比例了。

解碼的時候,從上到下遍歷樹,為壓縮的流選擇從左 / 右分支,每次碰到一個葉子節(jié)點(diǎn)的時候,就可以將對應(yīng)的字節(jié)寫到解壓輸出流中,然后再從根開始遍歷。

2.2. 實(shí)現(xiàn)

哈夫曼編碼器可以在基本壓縮庫中找到,其是非常直接的實(shí)現(xiàn)。

這個實(shí)現(xiàn)的基本缺陷是:

1.  慢位流實(shí)現(xiàn)

2.  相當(dāng)慢的解碼(比編碼慢)

3.  最大的樹深度是 32 (編碼器在任何超過 32 位大小的時候退出)。如果我不是搞錯的話,這是不可能的,除非輸出的數(shù)據(jù)大于 2 32 字節(jié)。

另一方面,這個實(shí)現(xiàn)有幾個優(yōu)點(diǎn):

1.  哈夫曼樹以一個緊密的形式每個符號要求 12 位(對于 8 位的符號)的方式存儲,這意味著最大的頭為 384

2.  編碼相當(dāng)容易理解

哈夫曼編碼在數(shù)據(jù)有噪音的情況(不是有規(guī)律的,例如 RLE )下非常好,這中情況下大多數(shù)基于字典方式的編碼器都有問題。

3.   Rice

對于由大 word (例如: 16 32 位)組成的數(shù)據(jù)和教低的數(shù)據(jù)值, Rice 編碼能夠獲得較好的壓縮比。音頻和高動態(tài)變化的圖像都是這種類型的數(shù)據(jù),它們被某種預(yù)言預(yù)處理過(例如 delta 相鄰的采樣)。

盡管哈夫曼編碼處理這種數(shù)據(jù)是最優(yōu)的,卻由于幾個原因而不適合處理這種數(shù)據(jù)(例如: 32 位大小要求 16GB 的柱狀圖緩沖區(qū)來進(jìn)行哈夫曼樹編碼)。因此一個比較動態(tài)的方式更適合由大 word 組成的數(shù)據(jù)。

3.1. 原理

Rice 編碼背后的基本思想是盡可能的用較少的位來存儲多個字(正像使用哈夫曼編碼一樣)。實(shí)際上,有人可能想到 Rice 是靜態(tài)的哈夫曼編碼(例如,編碼不是由實(shí)際數(shù)據(jù)內(nèi)容的統(tǒng)計(jì)信息決定,而是由小的值比高的值常見的假定決定)。

編碼非常簡單:將值 X X 個‘ 1 ’位之后跟一個 0 位來表示。

3.2. 實(shí)現(xiàn)

在基本壓縮庫針對 Rice 做了許多優(yōu)化:

1.  每個字最沒有意義的位被存儲為 k 和最有意義的 N-k 位用 Rice 編碼。 K 作為先前流中少許采樣的位平均數(shù)。這是通常最好使用 Rice 編碼的方法,隱藏噪音且對于動態(tài)變化的范圍并不導(dǎo)致非常長的 Rice 編碼。

2.  如果 rice 編碼比固定的開端長, T ,一個可選的編碼:輸出 T 個‘ 1 ’位,緊跟( log2(X-T) )個‘ 1 ’和一個‘ 0 ’位,接著是 X-T (最沒有意義的 (log2(X-T))-1 位)。這對于大值來說都是比較高效的代碼并且阻止可笑的長 Rice 編碼(最壞的情況,對于一個 32 word 單個 Rice 編碼可能變成 2 32 位或 512MB )。

如果開端是 4 ,下面是結(jié)果編碼表:

X

 

 

 

bin

 

 

 

Rice

 

 

 

Thresholded

 

 

 

Rice

 

 

 

0

 

 

 

00000

 

 

 

0

 

 

 

0

 

 

 

 

 

 

1

 

 

 

00001

 

 

 

10

 

 

 

10

 

 

 

 

 

 

2

 

 

 

00010

 

 

 

110

 

 

 

110

 

 

 

 

 

 

3

 

 

 

00011

 

 

 

1110

 

 

 

1110

 

 

 

 

 

 

4

 

 

 

00100

 

 

 

11110

 

 

 

11110

 

 

 

 

 

 

5

 

 

 

00101

 

 

 

111110

 

 

 

111110

 

 

 

 

 

 

6

 

 

 

00110

 

 

 

1111110

 

 

 

11111100

 

 

 

+1

 

 

 

7

 

 

 

00111

 

 

 

11111110

 

 

 

11111101

 

 

 

 

 

 

8

 

 

 

01000

 

 

 

111111110

 

 

 

1111111000

 

 

 

+1

 

 

 

9

 

 

 

01001

 

 

 

1111111110

 

 

 

1111111001

 

 

 

 

 

 

10

 

 

 

01010

 

 

 

11111111110

 

 

 

1111111010

 

 

 

-1

 

 

 

11

 

 

 

01011

 

 

 

111111111110

 

 

 

1111111011

 

 

 

-2

 

 

 

12

 

 

 

01100

 

 

 

1111111111110

 

 

 

111111110000

 

 

 

 

 

 

13

 

 

 

01101

 

 

 

11111111111110

 

 

 

111111110001

 

 

 

-1

 

 

 

14

 

 

 

01110

 

 

 

111111111111110

 

 

 

111111110010

 

 

 

-2

 

 

 

15

 

 

 

01111

 

 

 

1111111111111110

 

 

 

111111110011

 

 

 

-3

 

 

 

16

 

 

 

10000

 

 

 

11111111111111110

 

 

 

111111110100

 

 

 

-4

 

 

 

17

 

 

 

10001

 

 

 

111111111111111110

 

 

 

111111110101

 

 

 

-5

 

 

 

18

 

 

 

10010

 

 

 

1111111111111111110

 

 

 

111111110110

 

 

 

-6

 

 

 

19

 

 

 

10011

 

 

 

11111111111111111110

 

 

 

111111110111

 

 

 

-7

 

 

 

20

 

 

 

10100

 

 

 

111111111111111111110

 

 

 

11111111100000

 

 

 

-5

 

 

 

就像你看到的一樣,在這個實(shí)現(xiàn)中使用 threshold 方法僅僅兩個編碼導(dǎo)致一個最壞的情況;剩下的編碼產(chǎn)生比標(biāo)準(zhǔn) Rice 編碼還要短的編碼。

3.  最壞的情況,輸出。

4.   Lempel-Ziv (LZ77)

Lempel-Ziv 壓縮模式有許多不同的變量?;緣嚎s庫有清晰的 LZ77 算法的實(shí)現(xiàn)( Lempel-Ziv , 1977 ),執(zhí)行的很好,源代碼也非常容易理解。

LZ 編碼器能用來通用目標(biāo)的壓縮,特別對于文本執(zhí)行的很好。它也在 RLE 和哈夫曼編碼器( RLE LZ ,哈夫曼)中使用來大多數(shù)情況下獲得更多的壓縮。

4.1. 原理

LZ 壓縮算法的背后是使用 RLE 算法用先前出現(xiàn)的相同字節(jié)序列的引用來替代。

簡單的講, LZ 算法被認(rèn)為是字符串匹配的算法。例如:在一段文本中某字符串經(jīng)常出現(xiàn),并且可以通過前面文本中出現(xiàn)的字符串指針來表示。當(dāng)然這個想法的前提是指針應(yīng)該比字符串本身要短。

例如,在上一段短語“字符串”經(jīng)常出現(xiàn),可以將除第一個字符串之外的所有用第一個字符串引用來表示從而節(jié)省一些空間。

一個字符串引用通過下面的方式來表示:

1.  唯一的標(biāo)記

2.  偏移數(shù)量

3.  字符串長度

由編碼的模式?jīng)Q定引用是一個固定的或變動的長度。后面的情況經(jīng)常是首選,因?yàn)樗试S編碼器用引用的大小來交換字符串的大小(例如,如果字符串相當(dāng)長,增加引用的長度可能是值得的)。

4.2. 實(shí)現(xiàn)

使用 LZ77 的一個問題是由于算法需要字符串匹配,對于每個輸入流的單個字節(jié),每個流中此字節(jié)前面的哪個字節(jié)都必須被作為字符串的開始從而盡可能的進(jìn)行字符串匹配,這意味著算法非常慢。

另一個問題是為了最優(yōu)化壓縮而調(diào)整字符串引用的表示形式并不容易。例如,必須決定是否所有的引用和非壓縮字節(jié)應(yīng)該在壓縮流中的字節(jié)邊界發(fā)生。

基本壓縮庫使用一個清晰的實(shí)現(xiàn)來保證所有的符號和引用是字節(jié)對齊的,因此犧牲了壓縮比率,并且字符串匹配程序并不是最優(yōu)化的(沒有緩存、歷史緩沖區(qū)或提高速度的小技巧),這意味著程序非常慢。

另一方面,解壓縮程序非常簡單。

一個提高 LZ77 速度的試驗(yàn)已經(jīng)進(jìn)行了,這個試驗(yàn)中使用數(shù)組索引來加速字符串匹配的過程。然而,它還是比通常的壓縮程序慢。





——轉(zhuǎn)自http://m.shnenglu.com/windcsn

posted on 2011-04-06 08:48 coreBugZJ 閱讀(369) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            艳妇臀荡乳欲伦亚洲一区| 亚洲综合好骚| 99精品久久久| 久久久久久久尹人综合网亚洲| 欧美视频在线一区| 99视频精品全部免费在线| 欧美va亚洲va香蕉在线| 久久久人成影片一区二区三区| 国产精品一区毛片| 性一交一乱一区二区洋洋av| 夜夜爽夜夜爽精品视频| 欧美片在线观看| 一区二区高清在线观看| 亚洲三级毛片| 欧美人与禽猛交乱配| 9色porny自拍视频一区二区| 亚洲激情欧美| 欧美日韩第一区日日骚| 亚洲一区综合| 亚洲欧美高清| 亚洲自拍高清| 国产精品久久久久高潮| 亚洲免费小视频| 亚洲在线第一页| 国内成人精品2018免费看| 久久国产手机看片| 久久久久久亚洲精品杨幂换脸 | 日韩视频免费| 欧美吻胸吃奶大尺度电影| 亚洲你懂的在线视频| 亚洲免费视频观看| 一区福利视频| 日韩网站免费观看| 国产日韩欧美三区| 亚洲电影免费在线观看| 欧美日韩国产亚洲一区| 亚洲欧美电影院| 久久精品视频免费播放| 亚洲国产精品久久91精品| 亚洲日本欧美天堂| 国产精品久久网| 久久人人看视频| 欧美精品一区二区三区在线播放| 亚洲午夜激情网站| 久久精品夜夜夜夜久久| 亚洲图色在线| 久久久蜜桃精品| 亚洲一区二区三区四区在线观看| 久久国产视频网| 宅男噜噜噜66一区二区66| 欧美一区二区三区四区视频| 亚洲茄子视频| 欧美在线不卡| 亚洲欧美视频一区| 欧美岛国在线观看| 久久香蕉精品| 国产精品色午夜在线观看| 欧美成人蜜桃| 国产综合精品一区| 亚洲天堂av图片| 日韩视频在线播放| 久久精品国产一区二区三区| 亚洲女人天堂成人av在线| 美女黄毛**国产精品啪啪| 小辣椒精品导航| 欧美日本网站| 亚洲高清视频中文字幕| 国产一区二区久久久| 一区二区三区高清视频在线观看| 在线观看欧美视频| 亚洲欧美国产日韩天堂区| 亚洲精品资源| 免费不卡欧美自拍视频| 久久激情综合网| 欧美午夜免费| 亚洲区一区二| 亚洲人成毛片在线播放| 久久久综合精品| 久久偷看各类wc女厕嘘嘘偷窃| 国产精品久久久久久妇女6080| 亚洲人成网站影音先锋播放| 你懂的视频欧美| 久久精品久久99精品久久| 国产精品久久久久久超碰 | 欧美日韩成人在线播放| 嫩草影视亚洲| 亚洲国产天堂网精品网站| 久久久91精品| 久久久噜噜噜久噜久久| 国产性天天综合网| 欧美一二区视频| 久久久久成人精品| 国产婷婷色一区二区三区| 欧美一区日韩一区| 久热精品在线| 在线成人激情黄色| 欧美成人免费小视频| 欧美成人一区二区三区在线观看| 黑丝一区二区| 久久一区二区三区四区五区| 免费国产自线拍一欧美视频| 在线国产亚洲欧美| 蜜臀a∨国产成人精品| 最新国产乱人伦偷精品免费网站 | 亚洲综合色视频| 国产麻豆日韩欧美久久| 久久精品国产久精国产思思| 久久久久久色| 亚洲精品久久久久久下一站 | 午夜精品久久久99热福利| 久久www免费人成看片高清| 国内偷自视频区视频综合| 久久网站免费| 99国内精品久久| 久久九九99视频| 亚洲国产日韩欧美在线动漫| 欧美护士18xxxxhd| 一区二区三区日韩在线观看| 欧美制服丝袜第一页| 在线欧美影院| 欧美三级中文字幕在线观看| 亚洲欧美日韩成人高清在线一区| 免费日韩视频| 亚洲在线观看| 1769国产精品| 国产精品久久久久久户外露出| 久久黄色级2电影| 亚洲免费观看视频| 毛片av中文字幕一区二区| 一区二区三区四区五区精品| 国产欧美日韩三级| 欧美成年人视频| 午夜视频在线观看一区二区三区 | 欧美精品一区二区精品网| 亚洲欧美在线aaa| 亚洲精品国产精品乱码不99 | 亚洲私人影吧| 欧美大胆人体视频| 性欧美18~19sex高清播放| 在线观看一区二区精品视频| 欧美性jizz18性欧美| 噜噜噜躁狠狠躁狠狠精品视频| 欧美一区=区| 亚洲精品免费在线| 国产一区二区三区在线观看视频| 欧美黑人在线播放| 久久久久国产精品www| 亚洲视频一区在线观看| 亚洲国产综合在线| 免费成人在线视频网站| 欧美一区二区三区四区在线观看| 亚洲毛片在线观看| 亚洲电影第三页| 狠狠久久婷婷| 国产日韩欧美中文| 欧美日韩一卡二卡| 美女露胸一区二区三区| 久久精品99| 香蕉久久a毛片| 亚洲一区免费在线观看| 夜色激情一区二区| avtt综合网| 日韩香蕉视频| 亚洲毛片在线观看| 亚洲精品乱码| 91久久精品网| 最新国产成人在线观看| 欧美激情亚洲| 亚洲第一色在线| 欧美激情精品久久久久久蜜臀| 美女爽到呻吟久久久久| 久久久久久久精| 久久久久欧美精品| 久久天天狠狠| 免费的成人av| 91久久夜色精品国产九色| 亚洲激情网站| 日韩亚洲欧美一区| 在线一区二区日韩| 亚洲午夜久久久| 欧美亚洲尤物久久| 久久久女女女女999久久| 久久亚洲美女| 欧美极品一区二区三区| 欧美日韩性生活视频| 国产精品扒开腿做爽爽爽视频| 国产精品欧美一区二区三区奶水| 国产欧美日韩精品a在线观看| 国内精品一区二区三区| 亚洲欧洲一区二区三区| 在线视频欧美日韩| 欧美一级在线亚洲天堂| 久久久久9999亚洲精品| 欧美电影免费观看高清完整版| 亚洲欧洲日产国产综合网| 中文在线一区| 久久九九99| 欧美日韩成人网| 国产免费成人av| 亚洲国产精品一区二区第一页 |