關(guān)于LZW算法的改進(jìn)研究_第1頁
關(guān)于LZW算法的改進(jìn)研究_第2頁
關(guān)于LZW算法的改進(jìn)研究_第3頁
關(guān)于LZW算法的改進(jìn)研究_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、關(guān)于LZW算法的改進(jìn)研究     【摘要】 在分析LZW算法的基礎(chǔ)上,對LZW算法的缺陷進(jìn)行了探討。并對LZW算法進(jìn)行了改進(jìn),大幅度減少了編碼的長度,降低了匹配長度取值變化的影響,完全兼容LZW算法,在平均壓縮率方面有較大的提高,而且對改進(jìn)的算法進(jìn)行了分析論證。 【關(guān)鍵詞】  數(shù)據(jù)壓縮   LZW算法   緩沖區(qū)         LZW算法的實(shí)質(zhì)是無損壓縮技術(shù)1-3,LZW算法通過對輸入

2、流進(jìn)行分析,自適應(yīng)地生成一個(gè)包含輸入流中不重復(fù)子串的串表,將每一子串映射為一獨(dú)立的碼字輸出。這樣,它就充分利用了相鄰輸入之間的相關(guān)性,可以取得超過信源一階熵的編碼效率。然而,受緩存容量、計(jì)算復(fù)雜度和計(jì)算速度等因素的限制,串表的長度受到一定限制,且一般信源所具有的局部平穩(wěn)性隨緩存容量加大,編碼效率提高不大。即:它自身固有一定的缺陷與不足,難以滿足人們的需要,對它進(jìn)行改進(jìn)一直成為人們的研究目標(biāo)之一4-6。為了解決這一問題,本文對LZW算法進(jìn)行了改進(jìn),命名為LZWC編碼算法。它兼有LZW算法的優(yōu)點(diǎn),還具有自身的優(yōu)越性。首先對LZW算法進(jìn)行一些必要的介紹和分析。    &

3、#160;    1. LZW算法         LZW算法1由韋爾奇(T.A.Welch)于1984年通過對LZ算法的改進(jìn)。開發(fā)出的一種更優(yōu)算法。它是一種基于字典的編碼方法。并且它是LZ系列碼中應(yīng)用最廣,變形最多的一種算法。LZW壓縮有3個(gè)重要的對象:數(shù)據(jù)流、編碼流和編譯表。在編碼時(shí),數(shù)據(jù)流是輸入對象,編碼流就是輸出對象;在解碼時(shí),編碼流則是輸入對象,數(shù)據(jù)流是輸出對象;而編譯表是在編碼和解碼時(shí)都需要借助的對象。     &

4、#160;    1.1LZW算法的編碼原理         LZW算法的編碼原理為:對消息序列xn=x1x2x3xn從左到右進(jìn)行閱讀,并以此進(jìn)行LZW編碼:          (1)對x1顯然是第一次出現(xiàn),它的前面也沒有字符,那么他的編號是1,它的碼元為(1,0, x1)。         

5、60;(2)對于x2它可能有兩種情況發(fā)生,即x1=x2或x1x2。對此,有         如果x1=x2,那么對于x2不作編碼,而對x3的編碼位點(diǎn)取2,連接位點(diǎn)則為1,這表示對x3作第二次編碼,它與第一次編碼的x1相連接。          如果x1x2,那么x2的編碼位點(diǎn)取為2,連接位點(diǎn)則為0,這表示對x2作第二次編碼,它的前面沒有出現(xiàn)過相同的字符。       

6、   (3)依照上述步驟遞推,如果對向量xn=x1x2x3xn,n<m,我們已經(jīng)得到它的編碼:C=(i,li, xji),i=1,2, , k .         對上式的C滿足的條件:對每一個(gè)i有且只有一對(i,li),使li<i<ji成立。那么C構(gòu)成一LZW樹。由樹的構(gòu)造可知,對每個(gè)點(diǎn)i,它的枝li是唯一的。因此,樹C的全部枝為li,i=0,1,,k 確定,而且每個(gè)li與xn中的子向量xi對應(yīng)。  

7、60;       (4)如向量xn中的編碼C及相應(yīng)的樹確定,那么我們就可讀xn+1,xn+2, xn+k,并對它們繼續(xù)進(jìn)行編碼,如果有一個(gè)ik使xi=(xn+1,xn+2, xn+k)成立,而且對任何ik都有:xi( xn+1,xn+2, xn+k,xn+k+1)成立。那么:         不對字符xn+1,xn+2, xn+k進(jìn)行編碼。     

8、60;   對xn+k+1作它的編碼為(K+1,i, xn+k+1)。         以此類推,就可以完成對xn的編碼C。         2.2 LZW算法的原理         LZW算法通過編碼表來組織輸人字符串,并把它們轉(zhuǎn)換成一定長度的編碼。LZW算法有一個(gè)重要的特性稱作前綴性,即如果一個(gè)字符串在編

9、碼表上,那它的前綴串也在編碼表上。例如:A、B為兩個(gè)不同的字符串,AB組成一新的字符串,A為B的前綴串,如果B在編碼表中,則一定在編碼表中。         LZW通過編碼表識別源輸人字符序列,通過向編碼表中增加新的字符串,從而識別更多、更長的字符序列。但由于前綴性的約束,這種識別一般每次只在原來的基礎(chǔ)上增加一個(gè)字符,依次進(jìn)行。同時(shí),由于編碼算法沒有很強(qiáng)的分析功能,使它不知道哪些字符序列將來出現(xiàn)的概率較大,所以它具有一定的盲目性。例如,有一個(gè)長度為n的字符序列,LZW編碼表要完全識別它,則至少需要該序列部分或全部重

10、復(fù)出現(xiàn)n次。但是,當(dāng)一個(gè)較長的字符串重復(fù)出現(xiàn)兩次,我們就能夠容易識別它,而且這樣的字符串再次出現(xiàn)的概率是非常大的。基于這樣一種認(rèn)識,本文在LZW算法的基礎(chǔ)上,構(gòu)造了一種新的編碼算法,我們把新算法稱為LZWC編碼算法,一般情況下它對數(shù)據(jù)的壓縮率比LZW算法有大幅度提高。新算法在最差的情況下可退化成標(biāo)準(zhǔn)的LZW算法。下面對LZWC算法的原理進(jìn)行詳細(xì)的介紹。         2  LZWC算法         LZWC算法

11、的基本原理是針對源輸人數(shù)據(jù)中不同特點(diǎn)的數(shù)據(jù)序列,采用不同的編碼器分別編碼。數(shù)據(jù)序列的分類則是根據(jù)它的特點(diǎn),通過對原始數(shù)據(jù)序列的分析來完成。         LZWC算法共有兩個(gè)編碼器,它們是:         (1) 重復(fù)編碼器(RepeatCorder),簡稱RC。         (2) LZW編碼器。   

12、60;     RC對輸入流中重復(fù)的數(shù)據(jù)進(jìn)行編碼,剩下的數(shù)據(jù)由則由LZW編碼器進(jìn)行編碼。RC編碼器和LZW編碼器的編碼通過LZW編碼器的編碼表統(tǒng)一起來。         2.1  LZWC算法的編碼及原理         LZWC的算法過程如下:         對消息序列xn=x1x2x

13、3xn從左到右進(jìn)行閱讀,并以此進(jìn)行LZWC編碼:         (1) 輸入流中的數(shù)據(jù)x1,x2,xn依次經(jīng)過前緩沖區(qū)。         (4) 假如還有數(shù)據(jù)進(jìn)入緩沖區(qū),則轉(zhuǎn)1),繼續(xù)此過程。         (5) 否則,結(jié)束編碼過程。        &#

14、160;LZWC算法和LZW算法一樣采用編碼表來組織輸入數(shù)據(jù),顯然LZW的編碼表中包含RC和LZW兩個(gè)編碼器編碼的編碼表。我們分別稱其為編碼表中的RC項(xiàng)和LZW項(xiàng)。這兩項(xiàng)雖然對兩個(gè)編碼器來說是通用的,但實(shí)現(xiàn)時(shí)為了提高編碼表的搜索速度,可以把兩者分開處理。         RC的編碼識別很簡單,只在緩沖區(qū)中進(jìn)行,對于較長的重復(fù)字符,這種編碼方式簡便易行,效率較高。         LZW編碼器編碼不連續(xù)的字符,當(dāng)然是有效的,從而獲得較高的

15、壓縮率。從LZWC編碼過程可以看出,如果RC編碼器在輸入流中找不到滿足條件的字符,則LZW編碼器將獨(dú)自編碼輸入數(shù)據(jù)。這時(shí)LZWC算法退化為LZW算法。         2.2  LZWC算法的解碼原理         LZWC壓縮算法的解碼過程是編碼過程的逆過程,以下是LZWC算法的解碼過程:         (1)讀一個(gè)編碼(按LZW方

16、式確定的碼長);         (2)如果是結(jié)束碼,則結(jié)束解碼過程;         (3)如果是RC標(biāo)志的編碼,則按照RC編碼規(guī)則解碼,輸出原始數(shù)據(jù);         (4)否則,按LZW方式解碼;         (5)譯碼過程結(jié)束。    &

17、#160;    2.3  LZWC編碼的算例         下面,我們用一個(gè)例子來說明LZWC編碼算的過程。例如:假設(shè)信源發(fā)出的序列為:00110000111011100011001解:依題意,有:信源序列的數(shù)據(jù)依次經(jīng)過前緩沖區(qū),則         (1)RC編碼器對進(jìn)入前緩沖區(qū)的數(shù)據(jù)進(jìn)行檢測,x1=x2,x2x3,即:0重復(fù)出現(xiàn)2次,符合RC編碼的條件,則00的LZWC編

18、碼為(1,2,0)。         (2)RC編碼器繼續(xù)對進(jìn)入前緩沖區(qū)的數(shù)據(jù)進(jìn)行檢測,x3=x4,x4x5,1重復(fù)出現(xiàn)2次,符合RC編碼的條件,則11的LZWC編碼為(2,2,1)。         (3)RC編碼器繼續(xù)對進(jìn)入前緩沖區(qū)的數(shù)據(jù)進(jìn)行檢測,x5=x6,x6=x7,x7=x8,x8x9,0重復(fù)出現(xiàn)4次,符合RC編碼的條件,則0000的LZWC編碼為(3,4,0)。      &

19、#160;  (4)RC編碼器繼續(xù)對進(jìn)入前緩沖區(qū)的數(shù)據(jù)進(jìn)行檢測,x9=x10,x10=x11,x11x12,1重復(fù)出現(xiàn)3次,符合RC編碼的條件,則111的LZWC編碼為(4,3,1)。         (5)RC編碼器繼續(xù)對進(jìn)入前緩沖區(qū)的數(shù)據(jù)進(jìn)行檢測,x12x13,0僅出現(xiàn)1次,不符合RC編碼的條件,所以,不能用RC編碼器對其進(jìn)行編碼。但是,它符合LZW編碼的條件,由LZW編碼器,則0的LZWC編碼為(5,1,0)。         (6)RC編碼器繼續(xù)對進(jìn)入前緩沖區(qū)的數(shù)據(jù)進(jìn)行檢測,x13=x14,x14=x15,x15x16,1重復(fù)出現(xiàn)3次,符合RC編碼的條件,則111的LZWC編碼為(6,3,1)。         (7)RC編碼器繼續(xù)對進(jìn)入前緩沖區(qū)的數(shù)據(jù)進(jìn)行檢測,x16=x17,x17=x18,x18x19,0重復(fù)出現(xiàn)3次,符合RC編碼的條件,則000的LZWC編碼為(7,3,0)。 &

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論