LHARC中的動態(tài)限長編碼壓縮算法_第1頁
LHARC中的動態(tài)限長編碼壓縮算法_第2頁
LHARC中的動態(tài)限長編碼壓縮算法_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、LHARC中的動態(tài)限長編碼壓縮算法          摘 要 該文對DOS下常用的數(shù)據(jù)壓縮軟件LHARC的算法進(jìn)行了分析。該算法中采用了一種動態(tài)限長變化的不等長編碼方法,使最短碼2位,而最長碼不超過8位,達(dá)到了最佳壓縮效果。一、前言LHARC是DOS下的數(shù)據(jù)壓縮軟件之一,與同類軟件如ARJ、PKZIP、PKARC等相比,具有如下幾個特點。1.壓縮比高LHARC采用先進(jìn)的字符串自適應(yīng)壓縮與單個字符的限長變化編碼壓縮相結(jié)合的方法,對文件進(jìn)行雙重壓縮,盡可能地減少了冗余,對各類文件的壓縮效果都很好。2

2、.保密性好除應(yīng)具有保存文件、節(jié)約存儲空間的功能外,提高數(shù)據(jù)的保密性也是壓縮軟件的一個重要功能。LHARC由于采取了與眾不同的動態(tài)限長編碼壓縮技術(shù),使字符與其壓縮代碼之間無固定的對應(yīng)關(guān)系,壓縮后的數(shù)據(jù)更具保密性。3.軟件短小精悍LHARC整個軟件集壓縮、還原于一身,只有30余K,而其它同類軟件均有100余K。LHARC的基本壓縮原理是,將待壓縮文件看作是字符流(字節(jié)流),將其中的冗余信息分成兩類:(1) 同一字符的離散出現(xiàn)如 abcda這里,字符a出現(xiàn)了兩次。2.字符串的重復(fù)出現(xiàn)如 abcdabcd或abcdabcd這里,字符串a(chǎn)bcd出現(xiàn)了兩次。值得說明的是,這里串的概念是LZW方法意義下的,

3、即將字符流中每一字符均看作是一個串的起始字符。壓縮時,首先對字符流中的字符串進(jìn)行識別,將其中的重復(fù)串用壓縮格式記載,然后再將處理后的數(shù)據(jù)用不等長編碼進(jìn)行代碼變換及壓縮。下面僅就其中的動態(tài)限長變化編碼方法進(jìn)行介紹。二、動態(tài)限長編碼方法1.基本原理經(jīng)重復(fù)串壓縮后的數(shù)據(jù)中,重復(fù)串已大大減少,而同一字符的分布式冗余問題則比較突出。由于256個字符的使用概率一般不同,往往相差懸殊,若采用不等長編碼,將高頻字符用較短代碼表示,低頻字符用較長碼表示,則提高了整體的壓縮比。Haffman編碼是最佳不等長編碼,它根據(jù)文件中各字符的統(tǒng)計概率來分配代碼長度。如設(shè)文件中不同字符數(shù)為n,第i個字符的概率為Pi,代碼長度

4、為li,則當(dāng)概率滿足P1P2Pn時,Haffman編碼的碼長滿足l1l2ln,此時,代碼平均長度的數(shù)學(xué)期望=ni=1Pi·li達(dá)到最小。在一般的數(shù)據(jù)壓縮過程中,Haffman編碼的算法實現(xiàn)為:先統(tǒng)計出待壓文件中各字符的出現(xiàn)概率,據(jù)此動態(tài)建立一棵Haffman樹,并以二分樹的序列形式存入壓縮數(shù)據(jù)文件首部以用于還原過程。在壓縮過程中,由Haffman樹實現(xiàn)字符的ASCII碼(等長碼)與其壓縮代碼(Haffman不等長碼)的轉(zhuǎn)換。這種處理方法需對待壓縮文件進(jìn)行兩遍掃描,且Haffman樹須保存于壓縮數(shù)據(jù)文件中而占用額外的存儲空間。在LHARC的算法中,對Haffman編碼的實現(xiàn)采用了新的方

5、法。其基本原理是:在壓縮前動態(tài)建立一棵初始譯碼樹,在壓縮過程中不斷調(diào)整譯碼樹的結(jié)構(gòu),使各字符的壓縮代碼長度隨字符出現(xiàn)的次數(shù)增加而逐步縮減。最短碼的長度可達(dá)到2位,而最長碼不超過8位(二進(jìn)制),從而獲得很高的壓縮比。該算法的其它優(yōu)點還有:(1)無須事先統(tǒng)計各字符的出現(xiàn)概率,一次掃描即可;(2)譯碼樹須保存在壓縮數(shù)據(jù)文件中,還原時同樣生成即可;(3)字符與其壓縮代碼之間無固定對應(yīng)關(guān)系,使壓縮后的數(shù)據(jù)具有一定的保密性。2.壓縮的實現(xiàn)及碼樹的調(diào)整壓縮前動態(tài)建立一棵初始譯碼樹,每個葉結(jié)點對應(yīng)一個字符。由于壓縮前可以認(rèn)為各字符的出現(xiàn)概率相等,故初始碼樹應(yīng)為一有256片葉子的平衡二叉樹,如圖1所示。顯然每個

6、字符的初始代碼長度均為8位。09A04900.GIF;圖1 初始譯碼樹當(dāng)壓縮開始,第一個字符出現(xiàn)時,將其對應(yīng)第一個葉結(jié)點,沿碼樹向上的通路至根,所經(jīng)各邊標(biāo)號(左0右1)組成的0、1序列構(gòu)成該字符的初始代碼。輸出代碼后,調(diào)整碼樹,將該字符對應(yīng)的葉結(jié)點之值與上一層某一結(jié)點之值互換,當(dāng)該字符再次出現(xiàn)時,其路徑長度就會減少一結(jié)點。如字符原對應(yīng)8位長代碼,則再次出現(xiàn)后就對應(yīng)7位代碼了。如該字符繼續(xù)不斷地出現(xiàn),其所對應(yīng)的葉結(jié)點將逐級上升到第6層、第5層、甚至第2層,而此字符的碼長隨之減至6位、5位、直至2位。代碼長度縮減的規(guī)律是:設(shè)n為字符當(dāng)前所在層數(shù),則當(dāng)字符的重復(fù)出現(xiàn)次數(shù)為28-n時,代碼長度減少1位

7、。代碼長度的縮減會帶來一個十分關(guān)鍵的問題:當(dāng)碼樹各結(jié)點值是靜態(tài)的時候,一字符對應(yīng)了某一高層結(jié)點后,此結(jié)點的所有下層枝葉將不能再對應(yīng)其它字符,否則一些代碼將是另一些代碼的前綴,這將使還原過程無法進(jìn)行。因此代碼縮減將使編碼路徑數(shù)減少,一些后繼字符將無法由碼樹編碼。為此,該算法采取的策略是:按字符出現(xiàn)的次序?qū)⑺鼈兗信帕性诖a樹的一側(cè)葉子上,通過移動和交換分枝點之值的方法,使各層結(jié)點之值重新組合,從而使被占用結(jié)點的下屬枝葉可“稼接”到未用的結(jié)點上。因此,當(dāng)高層結(jié)點被占用后,其下屬結(jié)點仍可使用,不會減少編碼路徑數(shù)。具體來說,當(dāng)一后繼字符出現(xiàn)并且其對應(yīng)葉子的父結(jié)點已被占用,它將改變原有的編碼路徑,通過搜索找出一個未用的上層結(jié)點并由此得到其代碼。同樣,當(dāng)一字符須上升一層時,并不是升到其父結(jié)點中,而是升到上層中一個未用過的結(jié)點之中。當(dāng)該字符再度出現(xiàn)時,它將沿新路徑得到其代碼,此代碼的長度不僅為原代碼長度減1,而且此代碼的各個位也與原代碼不同。下面以一具體例子加以說明。設(shè)字符串為ababcabdabc各字符的編碼路徑如圖2所示。其中的Xi表示X的第i次出現(xiàn)。09A04901.GIF;圖2 字符編碼路徑示意圖由此可看出,由該算法給出的編碼方法是逐步達(dá)到最佳碼長的。一字符的壓縮代碼不僅與字符出現(xiàn)的次數(shù)有關(guān)(長度不同),而且與字符在文件中的位置有關(guān)(編碼路徑不同)。LHARC建立了

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論