在LZ壓縮算法的後面,RLE算法被用來替換先前引用的相同字節序列。
簡單來說,LZ算法被認為是壹種字符串匹配算法。例如,字符串經常出現在壹段文本中,可以用出現在前面文本中的字符串指針來表示。當然,這個想法的前提是指針要比字符串本身短。
比如最後壹段,經常出現“字符串”這個短語,為了節省空間,可以引用除第壹個字符串以外的所有內容。
字符串引用以下列方式表示:
1.唯壹標簽
2.抵消數量
3.字符串長度
編碼模式決定了引用是固定長度還是可變長度。後壹種情況通常是首選的,因為它允許編碼器用引用的大小來交換字符串的大小(例如,如果字符串很長,增加引用的長度可能是值得的)。
倫佩爾-齊夫壓縮算法的實現
使用LZ77的壹個問題是算法需要字符串匹配。對於每個輸入流的單個字節,必須將每個流中這個字節前面的哪個字節作為字符串的開頭,以盡可能地匹配字符串,這意味著算法非常慢。
另壹個問題是不容易調整字符串引用的表示來優化壓縮。例如,必須決定是否所有引用的和未壓縮的字節都應該出現在壓縮流中的字節邊界。
基本壓縮庫使用清晰的實現來確保所有符號和引用都是字節對齊的,從而犧牲了壓縮比,字符串匹配程序也沒有優化(沒有緩存、歷史緩沖或加速技巧),這意味著程序非常慢。
另壹方面,解壓縮程序非常簡單。
壹項提高LZ77速度的實驗已經完成。在本實驗中,使用數組索引來加速字符串匹配的過程。然而,它仍然比通常的壓縮程序慢。