LZW資料壓縮演算法

2021-08-30 20:11:03 字數 2336 閱讀 3450

表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演算法是一種壓縮技術,不會導致資料丟失。它構建了動態壓縮中使用的 和值的字典。該詞典不與壓縮檔案一起儲存,並且在壓縮後將被丟棄。在解壓縮期間,將從壓縮的資...