- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文字压缩–LZ78.doc
文字壓縮 – LZW演算法
黃育銘
國立暨南國際大學資訊工程系助理教授
E-Mail : ymhuang@csie.ncnu.edu.tw
假設我們想用電腦來儲存以下一段9個字元之文字資料,ABBBABAAB,如果每個字元用7個位元之ASCII碼(不含同位元)來儲存,則需63個位元之記憶體。然而,該電腦如果已擁有一個如表一之電腦字典,很幸運的,藉助該字典的資訊則僅需10個位元的記憶體,亦即AB、BB、AB、A、及AB等文字資料分別會先被編碼成10、11、10、00、及10等十個位元,然後再存入記憶體,其省下的儲存空間高達84﹪。之後,如果一次以兩個位元的方式來讀取資料,同樣地透過該字典的查尋,則記憶體內所儲存的資料1011100010,很快地就會被解讀出原來之文字資料ABBBABAAB。
字典索引 索引之對應編碼值 字典內容 1 00 A 2 01 B 3 10 AB 4 11 BB 表一. 電腦字典1
J. Ziv 及 A. Lempel兩位博士,於西元1977年及1978年〔參考文獻1 及2〕,陸續提出了兩篇有關文字資料壓縮的論文,該論文演算法在之後的文獻裏分別被稱作 LZ77及LZ78,奠定了爾後文字資料壓縮研究的良好根基。其中LZ78演算法的精神,相似於上述字典編碼法的觀念。西元1984年,T.A. Welch博士〔參考文獻3〕針對LZ78演算法作改進,提出所謂LZW演算法。至今,在處理文字資料壓縮的問題時,LZW演算法一直是廣泛被使用的一大利器。
上述之字典編碼法,稱作靜態字典( Static Dictionary)編碼法,因為表一電腦字典的內容是固定的。然而,如果想要儲存的資料為BAAABABBA,顯然透過表二之電腦字典,其資料壓縮效果會比透過表一之電腦字典來得好。
字典索引 索引之對應編碼值 字典內容 1 00 A 2 01 B 3 10 BA 4 11 AB 表二. 電腦字典2
因此,如果根據所欲儲存文字資料的型態,動態地建構起電腦字典的內容,即所謂動態字典( Adaptive Dictionary)編碼法,能明確地反應出目前所處理之文字資料的型態,當然其資料壓縮效果會比用靜態字典編碼法所得的結果來得好。LZW演算法即是屬於動態字典編碼法。
範例
編碼器:輸入字元序列 ABBBABAAB , 輸出索引序列 124313
解碼器:輸入索引序列 124313 , 輸出字元序列ABBBABAAB
字元 : 例如: A或B
索引 : 例如: 1、2、3、…
字串 : 一個字元(含)以上所組成,例如: A、AB、BBB、…
空字串 : 未含任一字元
LZW演算法
編碼法則: (S, C) S : 字串 C : 字元
先在字典裏存入輸入字元序列裏所有可能出現的字元,每一個字元在字典裏之對應索引值,即為該字元爾後會被編碼成的值。
從目前字典裏的內容找出最長字串S,假設其長度為 k,且該字串S與目前尚未被編碼之字元序列的前k個字元相同﹔C為目前未被編碼字元序列之第k+1個字元。
輸出字串S在字典裏的索引值。
將新的字串(SC)存入字典裏,且爾後該字串SC會被編碼成其在字典裏之對應索引值。
對C字元(含)以後之剩餘字元序列繼續作編碼(即重覆法則2)。
解碼法則: (S1, S2(=CS3)) S1, S2: 字串 C : 字元 S3 : 字串或空字串
如同編碼法則1,先建構起含輸入字元序列裏所有可能出現字元的字典,每一個字元在字典裏之對應索引值,即為該字元在編碼器裏會被編碼成的值。
依序從收到的索引值,根據目前字典裏的內容,可解碼出相對應的字串。
假設目前收到的索引值,其被解碼出字串S2(=CS3),且上一個收到的索引值,其被解碼成字串S1。則將新的字串(S1C)存入字典裏,而其對應之新索引值,爾後將會被解碼出S1C。
重覆法則2。
範例之編碼過程 : 詳如表三
步驟0 : 將A 及B字元存入字典裏,也就是A 及B字元爾後分別會被編碼成索引值1及2。
步驟1 : 從目前字典內容及未被編碼之序列ABBBABAAB,得到S=A,k=1,C=B,所以輸出A在字典裏的索引值1, 並將新的字串AB存入字典裏,其索引值等於3。
步驟2 : 從目前字典內容及未被編碼之序列BBBABAAB,得到S=B,k=1,C=B,所以輸出B在字典裏的索引值2, 並將新的字串BB存入字典裏,其索引值等於4。
步驟3 : 從目前字典內容及未被編碼之序列BBABAAB,得到S=BB,k=2,C=A,所以輸出BB在字典裏的索引值4, 並將新的字串BBA存入字典裏,其索引值等於5。
步驟4 : 從目前字典內容及未被編碼之序列ABAAB,得到S=AB,k=2,C=A,所以輸出AB在字典裏的索引
文档评论(0)