表4-15 詞典
碼字(code word )
字首(prefix )1…
…193
a194b…
…255……
1305
abcdefxyf01234……
lzw編碼器(軟體編碼器或硬體編碼器)就是通過管理這個詞典完成輸入與輸出之間的轉換。lzw編碼器的輸入是字元流 (charstream),字元流可以是用8位ascii字元組成的字串,而輸出是用n位(例如12位)表示的碼字流(codestream),碼字代表單個字元或多個字元組成的字串。
lzw編碼器使用了一種很實用的分析(parsing)演算法,稱為貪婪分析演算法(greedy parsing algorithm)。在貪婪分析演算法中,每一次分析都要序列地檢查來自字元流(charstream)的字串,從中分解出已經識別的最長的字串,也就是已經在詞典中出現的最長的字首(prefix)。用已知的字首(prefix)加上下乙個輸入字元c也就是當前字元(current character)作為該字首的擴充套件字元,形成新的擴充套件字串——綴-符串(string):prefix.c。這個新的綴-符串(string)是否要加到詞典中,還要看詞典中是否存有和它相同的綴-符串string。如果有,那麼這個綴-符串(string)就變成字首(prefix),繼續輸入新的字元,否則就把這個綴-符串(string)寫到詞典中生成乙個新的字首(prefix),並給乙個**。
lzw編碼演算法的具體執行步驟如下:
步驟1: 開始時的詞典包含所有可能的根(root),而當前字首p是空的;
步驟2: 當前字元(c) :=字元流中的下乙個字元;
步驟3: 判斷綴-符串p+c是否在詞典中
(1) 如果「是」:p := p+c // (用c擴充套件p);
(2) 如果「否」
① 把代表當前字首p的碼字輸出到碼字流;
② 把綴-符串p+c新增到詞典;
③ 令p := c //(現在的p僅包含乙個字元c);
步驟4: 判斷碼字流中是否還有碼字要譯
(1) 如果「是」,就返回到步驟2;
(2) 如果「否」
① 把代表當前字首p的碼字輸出到碼字流;
② 結束。
lzw編碼演算法可用偽碼表示。開始時假設編碼詞典包含若干個已經定義的單個碼字。例如,256個字元的碼字,用偽碼可以表示成:
dictionary[j]
2. 解碼演算法
dictionary[j]
表4-16 被編碼的字串
位置1 2
3 4
5 6
7 8
9 字元
a b
b a
b a
b a
c 表4-17 lzw的編碼過程
步驟位置
詞典輸出
(1)a (2)
b (3)
c 1
1 (4)
a b(1)
2 2
(5)b b
(2)3 3
(6)b a
(2)4 4
(7)a b a
(4)5 6
(8)a b a c
(7)6 --
----
(3)
表4-18解釋了解碼過程。每個解碼步驟解碼器讀乙個碼字,輸出相應的綴-符串,並把它新增到詞典中。例如,在步驟4中,先前碼字(2)儲存在先前碼字(pw )中,當前碼字(cw )是(4),當字首-符串string.cw 是輸出(「a b」),先字首-符串string.pw ("b")是用當字首-符串string.cw ("a")的第乙個字元,其結果("b a") 新增到詞典中,它的索引號是(6)
表4-18 lzw的解碼過程
步驟**
詞典輸出
(1)a (2)
b (3)
c 1
(1)--
--a 2
(2)(4)
a bb 3
(2)(5)
b bb 4
(4)(6)
b aa b
5 (7)
(7)a b a
a b a
6 (3)
(8)a b a c
c lzw演算法得到普遍採用,它的速度比使用lz77演算法的速度快,因為它不需要執行那麼多的綴-符串比較操作。對lzw演算法進一步的改進是增加可變的碼字長度,以及在詞典中刪除老的綴-符串。在gif影象格式和unix的壓縮程式中已經採用了這些改進措施之後的lzw演算法。
lzw演算法取得了專利,專利權的所有者是美國的乙個大型計算機公司—unisys(優利系統公司),除了商業軟體生產公司之外,可以免費使用lzw演算法
(完)create@2010-10-28
LZW壓縮演算法
lzw演算法和lz78演算法在編碼方式上的不同 步驟1 開始時的詞典包含所有可能的根 root 當前字首p為空 步驟3 判斷綴 符串p char是否在詞典中 1 如果 是 p p char 用char擴充套件p 2 如果 否 把代表當前字首p的碼字輸出到碼字流 把綴 符串p char新增到詞典 令p...
資料壓縮演算法
之前在聽到資料壓縮的時候,想著肯定是某些高深莫測的演算法,能夠完成資料的壓縮這種事情,最近看了看,嗯,至少咱還是能看懂的.眾所周知,不管你是exe,word,txt,dmg等等,在儲存上都是以二進位制進行儲存的,所以,在討論壓縮時,忽略檔案格式即可,只要將其看做一串數字即可.開始了,上數字串 111...
lzw壓縮演算法 VBScript中的LZW壓縮演算法
lzw壓縮演算法 介紹本文向您展示如何在vbscript中實現lzw無失真壓縮演算法。它也可以按原樣或幾乎按原樣在vba中使用。lzw演算法lzw演算法是一種壓縮技術,不會導致資料丟失。它構建了動態壓縮中使用的 和值的字典。該詞典不與壓縮檔案一起儲存,並且在壓縮後將被丟棄。在解壓縮期間,將從壓縮的資...