LHARC中的動態(tài)限長編碼壓縮算法
一、前言
LHARC是DOS下的數(shù)據(jù)壓縮軟件之一,與同類軟件如ARJ、PKZIP、PKARC等相比,具有如下幾個特點。
1.壓縮比高
LHARC采用先進的字符串自適應壓縮與單個字符的限長變化編碼壓縮相結合的方法,對文件進行雙重壓縮,盡可能地減少了冗余,對各類文件的壓縮效果都很好。
2.保密性好
除應具有保存文件、節(jié)約存儲空間的功能外,提高數(shù)據(jù)的保密性也是壓縮軟件的一個重要功能。LHARC由于采取了與眾不同的動態(tài)限長編碼壓縮技術,使字符與其壓縮代碼之間無固定的對應關系,壓縮后的數(shù)據(jù)更具保密性。
3.軟件短小精悍
LHARC整個軟件集壓縮、還原于一身,只有30余K,而其它同類軟件均有100余K。
LHARC的基本壓縮原理是,將待壓縮文件看作是字符流(字節(jié)流),將其中的冗余信息分成兩類:
(1) 同一字符的離散出現(xiàn)
如 abcda……
這里,字符a出現(xiàn)了兩次。
2.字符串的重復出現(xiàn)
如 abcdabcd……或abcd…abcd……
這里,字符串abcd出現(xiàn)了兩次。值得說明的是,這里串的概念是LZW方法意義下的,即將字符流中每一字符均看作是一個串的起始字符。
壓縮時,首先對字符流中的字符串進行識別,將其中的重復串用壓縮格式記載,然后再將處理后的數(shù)據(jù)用不等長編碼進行代碼變換及壓縮。下面僅就其中的動態(tài)限長變化編碼方法進行介紹。
二、動態(tài)限長編碼方法
1.基本原理
經重復串壓縮后的數(shù)據(jù)中,重復串已大大減少,而同一字符的分布式冗余問題則比較突出。由于256個字符的使用概率一般不同,往往相差懸殊,若采用不等長編碼,將高頻字符用較短代碼表示,低頻字符用較長碼表示,則提高了整體的壓縮比。
Haffman編碼是最佳不等長編碼,它根據(jù)文件中各字符的統(tǒng)計概率來分配代碼長度。如設文件中不同字符數(shù)為n,第i個字符的概率為Pi,代碼長度為li,則當概率滿足P1≥P2≥…≥Pn時,Haffman編碼的碼長滿足l1≤l2≤…≤ln,此時,代碼平均長度的數(shù)學期望=∑ni=1Pi·li達到最小。
在一般的數(shù)據(jù)壓縮過程中,Haffman編碼的算法實現(xiàn)為:先統(tǒng)計出待壓文件中各字符的出現(xiàn)概率,據(jù)此動態(tài)建立一棵Haffman樹,并以二分樹的序列形式存入壓縮數(shù)據(jù)文件首部以用于還原過程。在壓縮過程中,由Haffman樹實現(xiàn)字符的ASCII碼(等長碼)與其壓縮代碼(Haffman不等長碼)的轉換。這種處理方法需對待壓縮文件進行兩遍掃描,且Haffman樹須保存于壓縮數(shù)據(jù)文件中而占用額外的存儲空間。
在LHARC的算法中,對Haffman編碼的實現(xiàn)采用了新的方法。其基本原理是:在壓縮前動態(tài)建立一棵初始譯碼樹,在壓縮過程中不斷調整譯碼樹的結構,使各字符的壓縮代碼長度隨字符出現(xiàn)的次數(shù)增加而逐步縮減。最短碼的長度可達到2位,而最長碼不超過8位(二進制),從而獲得很高的壓縮比。該算法的其它優(yōu)點還有:(1)無須事先統(tǒng)計各字符的出現(xiàn)概率,一次掃描即可;(2)譯碼樹須保存在壓縮數(shù)據(jù)文件中,還原時同樣生成即可;(3)字符與其壓縮代碼之間無固定對應關系,使壓縮后的數(shù)據(jù)具有一定的保密性。
2.壓縮的實現(xiàn)及碼樹的調整
壓縮前動態(tài)建立一棵初始譯碼樹,每個葉結點對應一個字符。由于壓縮前可以認為各字符的出現(xiàn)概率相等,故初始碼樹應為一有256片葉子的平衡二叉樹,如圖1所示。顯然每個字符的初始代碼長度均為8位。
@@09A04900.GIF;圖1 初始譯碼樹@@
當壓縮開始,第一個字符出現(xiàn)時,將其對應第一個葉結點,沿碼樹向上的通路至根,所經各邊標號(左0右1)組成的0、1序列構成該字符的初始代碼。輸出代碼后,調整碼樹,將該字符對應的葉結點之值與上一層某一結點之值互換,當該字符再次出現(xiàn)時,其路徑長度就會減少一結點。如字符原對應8位長代碼,則再次出現(xiàn)后就對應7位代碼了。如該字符繼續(xù)不斷地出現(xiàn),其所對應的葉結點將逐級上升到第6層、第5層、甚至第2層,而此字符的碼長隨之減至6位、5位、直至2位。
代碼長度縮減的規(guī)律是:設n為字符當前所在層數(shù),則當字符的重復出現(xiàn)次數(shù)為28-n時,代碼長度減少1位。
代碼長度的縮減會帶來一個十分關鍵的問題:當碼樹各結點值是靜態(tài)的時候,一字符對應了某一高層結點后,此結點的所有下層枝葉將不能再對應其它字符,否則
一些代碼將是另一些代碼的前綴,這將使還原過程無法進行。因此代碼縮減將使編碼路徑數(shù)減少,一些后繼字符將無法由碼樹編碼。為此,該算法采取的策略是:按字符出現(xiàn)的次序將它們集中排列在碼樹的一側葉子上,通過移動和交換分枝點之值的方法,使各層結點之值重新組合,從而使被占用結點的下屬枝葉可“稼接”到未用的結點上。因此,當高層結點被占用后,其下屬結點仍可使用,不會減少編碼路徑數(shù)。具體來說,當一后繼字符出現(xiàn)并且其對應葉子的父結點已被占用,它將改變原有的編碼路徑,通過搜索找出一個未用的上層結點并由此得到其代碼。
同樣,當一字符須上升一層時,并不是升到其父結點中,而是升到上層中一個未用過的結點之中。當該字符再度出現(xiàn)時,它將沿新路徑得到其代碼,此代碼的長度不僅為原代碼長度減1,而且此代碼的各個位也與原代碼不同。下面以一具體例子加以說明。
設字符串為ababcabdabc……各字符的編碼路徑如圖2所示。其中的Xi表示X的第i次出現(xiàn)。
@@09A04901.GIF;圖2 字符編碼路徑示意圖@@
由此可看出,由該算法給出的編碼方法是逐步達到最佳碼長的。一字符的壓縮代碼不僅與字符出現(xiàn)的次數(shù)有關(長度不同),而且與字符在文件中的位置有關(編碼路徑不同)。
LHARC建立了兩個表專門用來記錄碼樹的占用情況及各字符出現(xiàn)的次數(shù),以便確定對碼樹的各種調整。當壓縮后的數(shù)據(jù)達到32K時,將對表及碼樹進行“重組”,刪除表中部分累積的數(shù)據(jù)后再繼續(xù)進行壓縮,以后將每隔16K“重組”一次。
2.部分稿件來源于網(wǎng)絡,如有不實或侵權,請聯(lián)系我們溝通解決。最新官方信息請以湖北省教育考試院及各教育官網(wǎng)為準!
-
122023-04湖北自考風景園林專業(yè)本科畢業(yè)論文范文湖北自考風景園林專業(yè)本科畢業(yè)論文范文
-
122023-04湖北自考土木工程專業(yè)本科畢業(yè)論文范文湖北自考土木工程專業(yè)本科畢業(yè)論文范文
-
122023-04湖北自考計算機信息安全本科畢業(yè)論文范文湖北自考計算機信息安全本科畢業(yè)論文范文
-
122023-04湖北自考建筑學本科畢業(yè)論文范文湖北自考建筑學本科畢業(yè)論文范文
-
122023-04湖北自考軟件工程本科畢業(yè)論文湖北自考軟件工程本科畢業(yè)論文
-
122023-04湖北自考網(wǎng)絡工程專業(yè)本科畢業(yè)論文范文湖北自考網(wǎng)絡工程專業(yè)本科畢業(yè)論文范文
已幫助10w萬+意向學歷提升用戶成功上岸
-
毛澤東思想概論
培訓優(yōu)勢:課時考點精講+刷題+沖刺,熟練應對考試題型。全程督促學習,安排好學習計劃。 毛澤東思想概論...自考培訓 -
英語二
本課程既是一門語言實踐課程,也是拓寬知識、了解世界文化的重要素質課程,它以培養(yǎng)學習者的綜合語言應用能力為目標,使他們在學習、工作和社會交往中能夠使用英語進行有效的交流。 英語二...自考培訓 -
馬克思主義基本原理概論
本書包括兩個部分:自學考試大綱和基本原理。主要內容有,馬克思主義是關于工人階級和人類解放的科學,物質世界及其發(fā)展規(guī)律,認識的本質及其規(guī)律,人類社會及其發(fā)展規(guī)律,資本主義的形成及其發(fā)展,資本主義發(fā)展的歷史進程,社會主義社會及其進程,共產主義社會及其進程等。 馬克思主義基本原理概論...自考培訓 -
思想道德修養(yǎng)與法律基礎
《思想道德修養(yǎng)與法律基礎》課具有鮮明的政治性、思想性、理論性、針對性、科學性、知識性以及實踐性和修養(yǎng)性。它包羅政治、思想、道德、心理本質、學習成才和法律本質等內容,指導和回答大學生在人生、抱負、信念等方面遍及關心和迫切需要解決的問題。 思想道德修養(yǎng)與法律基礎...自考培訓 -
中國近代史綱要
“中國近現(xiàn)代史綱要”全國高等教育自學考試指定教材,依據(jù)中央審定的普通高等學?!爸袊F(xiàn)代史綱要”編寫大綱以及馬克思主義理論研究和建設工程重點教材《中國近現(xiàn)代史綱要》,結合自學考試的特點設計了十章,集中講述1840年鴉片戰(zhàn)爭爆發(fā)一直到2007年中國共產黨第十七次全國代表大會召開的160多年的中國近現(xiàn)代歷史。 中國近代史綱要...自考培訓
掃一掃關注微信公眾號
隨時獲取湖北省自考政策、通知、公告以及各類學習資料、學習方法、課程。