LZ77

 

1.       °³°ü

 

ÀÌ ¾Ë°í¸®ÁòÀº Abraham Lempel°ú Jakob Ziv°¡ 1977³â¿¡ ¸¸µé¾î³½ µ¥ÀÌÅÍ ¾ÐÃà ¾Ë°í¸®ÁòÀÔ´Ï´Ù. ÀÌ ¾Ë°í¸®ÁòÀÇ ¸ÞÀÎ ¾ÆÀ̵ð¾î´Â ÀÌ¹Ì Çѹø ÀÌ»ó »ç¿ëµÈ ¹®ÀÚ¿­Àº ±âÁ¸ÀÇ ¹®ÀÚ¿­ÀÇ »ó´ëÀû À§Ä¡¿Í ÀÏÄ¡ÇÏ´Â ±æÀ̸¸À» ÀúÀåÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ ¾Ë°í¸®ÁòÀº LZSS, LZ78, LZW, LZWM°ú °°Àº ¾Ë°í¸®ÁòÀÇ ±â¹ÝÀÔ´Ï´Ù.

 

2. ¿ë¾î

Input stream : ¾ÐÃàµÉ ¿øº» ¹®ÀÚ¿­

Output stream : ¾ÐÃàµÈ °á°ú

Character : ¾ÐÃàµÉ ¹®ÀÚ¿­ÀÇ ±âº»ÀûÀÎ µ¥ÀÌÅÍ ´ÜÀ§

Coding position : Input stream³»¿¡¼­ ÇöÀç ¾ÐÃàÀ» ÁøÇàÇϰí Àִ ó¸®ÁöÁ¡ÀÇ  offset. lookahead bufferÀÇ Ã³À½°ú ÀÏÄ¡ÇÑ´Ù.

lookahead buffer : CP¿¡¼­ input streamÀÇ ¸¶Áö¸· character±îÁö¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù.

Window : ÀÌ¹Ì Ã³¸®°¡ ³¡³­ W(window size)°³ÀÇ characterµé. Áï, Coding position ¾Õ¿¡ ÀÖ´Â W°³ÀÇ ¹®ÀÚ¿­À» ÀǹÌÇÑ´Ù.

Pointer(p) : Window¿Í lookahead buff¿¡¼­ ÀÏÄ¡ÇÑ ¹®ÀÚ¿­À» ãÀº °æ¿ì, ±× ¹®ÀÚ¿­ÀÇ ½ÃÀÛ À§Ä¡¸¦ ³ªÅ¸³½´Ù. Ç¥Çö ¹æ¹ýÀº CP·ÎºÎÅÍ ¸î character°¡ ¶³¾îÁ® Àִ°¡ ÀÌ´Ù.

Length(len) : ÀÏÄ¡ÇÏ´Â ¹®ÀÚ¿­ÀÇ ±æÀÌ

 

 

 

3.       ¿ø¸®

window¿¡¼­ lookaheadÀÇ ¾ÕºÎºÐ°ú ÀÏÄ¡ÇÏ´Â °¡Àå ±ä ¹®ÀÚ¿­À» ã¾Æ³½´Ù. ±×¸®°í ±× À§Ä¡¿Í ÀÏÄ¡ÇÏ´Â ±æÀÌ, Áï ( p, len)À» output streamÀ¸·Î Ãâ·ÂÇÑ´Ù. ¹®Á¦´Â 1 character Á¶Â÷µµ window¿¡¼­ ÀÏÄ¡ÇÏ´Â character°¡ ¾øÀ» ¼öµµ ÀÖ´Ù. ±×·¸±â ¶§¹®¿¡ lookaheadÀÇ Ã¹ character¸¦ ÇÔ²² ÀúÀåÇØ ÁØ´Ù.

 

 

4.       The encoding algorithm

1) Cording positionÀ» input streamÀÇ ½ÃÀÛ¿¡ À§Ä¡ÇØÁØ´Ù.

       2) window¿¡¼­ lookahead bufferÀÇ ½ÃÀۺκкÎÅÍ ÀÏÄ¡ÇÏ´Â °¡Àå ±ä ¹®ÀÚ¿­À» ã´Â´Ù.

3) ¡°(p,len) C¡±¸¦ output½ÃŲ´Ù.

-          p : ÀÏÄ¡ÇÏ´Â ¹®ÀÚ¿­ÀÇ ½ÃÀÛ ºÎºÐ±îÁöÀÇ »ó´ëÀûÀÎ °Å¸®

-          len : ÀÏÄ¡ÇÏ´Â ¹®ÀÚ¿­ÀÇ ±æÀÌ

-          C : lookahead¿¡¼­ ÀÏÄ¡ÇÏÁö ¾Ê´Â Á¦ÀÏ Ã¹ character

 

4) lookahead buffer°¡ ºñ¾îÀÖÁö ¾Ê´Ù¸é coding position°ú window¸¦ len+1¸¸Å­ ¿Å°ÜÁØ´Ù. ±×¸®°í 2)·Î °£´Ù.

 

5.       The decoding algorithm

encoding algorithmÀ» ÀÌÇØÇß´Ù¸é ½±°Ô decoding algorithmÀ» ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿©±â¼­ window´Â encoding ¶§¿Í µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î À¯ÁöµÈ´Ù.

 

input stream : ¾ÐÃàµÈ ÀÚ·áÀÇ stream

output stream : ¾ÐÃàÀÌ Ç®¸° ¿ø·¡ ÇüÅÂÀÇ ÀÚ·á

 

1)      input stream¿¡¼­ ÇϳªÀÇ ¡°(p,len)C¡± ¸¦ ÀÐ¾î µéÀδÙ. ¸¸¾à ÀÐÀ»°Ô ¾ø´Ù¸é Á¾·á

2)      window¿¡¼­ pÀÇ À§Ä¡·Î °¡¼­ len¸¸Å­ÀÇ character¸¦ Àо output stream¿¡ Ãâ·ÂÇϰí window³¡¿¡ Ãß°¡ ½ÃŲ´Ù.

3)      C¸¦ output stream¿¡ Ãâ·ÂÇϰí window ³¡¿¡ Ãß°¡ ½ÃŲ´Ù.

4)      1)·Î µ¹¾Æ°£´Ù.

  

 

6.       Example

Input stream for encoding:

Pos : position

Pos

1

2

3

4

5

6

7

8

9

Char

A

A

B

C

B

B

A

B

C

 

Table 1: The encoding process

Step

Pos

Match

Char

Output

1.

1

--

A

(0,0) A

2.

2

A

B

(1,1) B

3.

4

--

C

(0,0) C

4.

5

B

B

(2,1) B

5.

7

A B

C

(5,2) C

 

 

7. Ư¡

²Ï ±¦ÂúÀº ¾ÐÃà·üÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¾Ë°í¸®ÁòÀº °£´ÜÇÏÁö¸¸, encoding ½Ã¿¡´Â window¿¡¼­ ÀÏÀÏÀÌ lookahead buffer¿Í ´ëÁ¶¸¦ ÇÏ¿©¾ß ÇϹǷΠ¼Óµµ°¡ »ó´çÈ÷ ´À¸³´Ï´Ù. ¹Ý¸é decodingÀº ¾Ë°í¸®Áòµµ °£´ÜÇÏ°í ¸Å¿ì ºü¸¨´Ï´Ù. ±¸Çö½Ã¿¡ window¸¦ ¸Þ¸ð¸®¿¡ ³Ö°í »ç¿ëÇϸé 4kb~64kbÁ¤µµÀÇ ¸Þ¸ð¸®¸¦ »ç¿ëÀ¸·Î ±¸ÇöÀÌ °¡´ÉÇÕ´Ï´Ù. ±×¸®°í LZSS¶õ ¾Ë°í¸®ÁòÀÌ Àִµ¥ À̰ÍÀº LZ77¿¡¼­ ¾à°£ °³¼±µÈ °ÍÀ̸ç Á»´õ ÁÁÀº ¾ÐÃà·üÀ» ±â´ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

 

 

ÂüÁ¶ : http://www.rasip.fer.hr/research/compress/algorithms/fund/lz/lz77.html