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