Опубликован: 11.04.2007 | Доступ: свободный | Студентов: 6027 / 2289 | Оценка: 4.37 / 4.24 | Длительность: 11:19:00
Лекция 7:

Подстановочные или словарно-ориентированные алгоритмы сжатия информации. Методы Лемпела-Зива

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

LZ-алгоритмы распаковки данных. Примеры

1. LZ77, длина словаря - 8 байт (символов). Коды сжатого сообщения - \<0,0,'К'\> \<0,0,'Р'\> \<0,0,'А'\> \<0,0,'С'\> \<0,0,'Н'\> \<5,1,'Я'\>
\<0,0,' '\> \<0,4,'К'\> \<0,0,'А'\>.

\centerline{\vbox{\offinterlineskip\tt
\halign{\strut\hfil\ #\ \hfil&
        \vrule#& \hfil\ #\ \hfil&
        \vrule#& \hfil\ #\ \hfil\cr
ВХОДНОЙ КОД&& ПЕЧАТЬ&& СЛОВАРЬ\cr
\noalign{\hrule}
<0,0,'К'>  && "К"   && ".......К"\cr
<0,0,'Р'>  && "Р"   && "......КР"\cr
<0,0,'А'>  && "А"   && ".....КРА"\cr
<0,0,'С'>  && "С"   && "....КРАС"\cr
<0,0,'Н'>  && "Н"   && "...КРАСН"\cr
<5,1,'Я'>  && "АЯ"  && ".КРАСНАЯ"\cr
<0,0,' '>  && " "   && "КРАСНАЯ "\cr
<0,4,'К'>  &&"КРАСК"&& "АЯ КРАСК"\cr
<0,0,'А'>  && "А"   && "Я КРАСКА"\cr}}}

2. LZSS, длина словаря - 8 байт (символов). Коды сжатого сообщения - 0'К' 0'Р' 0'А' 0'С' 0'Н' 1\<5,1\> 0'Я' 0' ' 1\<0,4\> 1\<4,1\> 1\<0,1\>.

\centerline{\vbox{\offinterlineskip\tt
\halign{\strut\hfil\ #\ \hfil&
        \vrule#& \hfil\ #\ \hfil&
        \vrule#& \hfil\ #\ \hfil\cr
ВХОДНОЙ КОД&& ПЕЧАТЬ&& СЛОВАРЬ\cr
\noalign{\hrule}
0 'К'      && "К"   && ".......К"\cr
0 'Р'      && "Р"   && "......КР"\cr
0 'А'      && "А"   && ".....КРА"\cr
0 'С'      && "С"   && "....КРАС"\cr
0 'Н'      && "Н"   && "...КРАСН"\cr
1 <5,1>    && "А"   && "..КРАСНА"\cr
0 'Я'      && "Я"   && ".КРАСНАЯ"\cr
0 ' '      && " "   && "КРАСНАЯ "\cr
1 <0,4>    && "КРАС"&& "НАЯ КРАС"\cr
1 <4,1>    && "К"   && "АЯ КРАСК"\cr
1 <0,1>    && "А"   && "Я КРАСКА"\cr}}}

3. LZ78, длина словаря - 16 фраз. Коды сжатого сообщения - \<0,'К'\> \<0,'Р'\> \<0,'А'\> \<0,'С'\> \<0,'Н'\> \<3,'Я'\> \<0,' '\>
\<1,'Р'\> \<3,'С'\> \<1,'А'\>.

\centerline{\vbox{\offinterlineskip\tt
\halign{\strut\hfil\ #\ \hfil&
        \vrule#& \hfil\ #\ \hfil&
        \vrule#& \hfil\ #\ \hfil\cr
ВХОДНОЙ&& ПЕЧАТЬ   && ПОЗИЦИЯ\cr
КОД    && (СЛОВАРЬ)&& СЛОВАРЯ\cr
\noalign{\hrule}
       && ""       && 0\cr
<0,'К'>&& "К"      && 1\cr
<0,'Р'>&& "Р"      && 2\cr
<0,'А'>&& "А"      && 3\cr
<0,'С'>&& "С"      && 4\cr
<0,'Н'>&& "Н"      && 5\cr
<3,'Я'>&& "АЯ"     && 6\cr
<0,' '>&& " "      && 7\cr
<1,'Р'>&& "КР"     && 8\cr
<3,'С'>&& "АС"     && 9\cr
<1,'А'>&& "КА"     && 10\cr}}}

4. LZW, длина словаря - 500 фраз. Коды сжатого сообщения - 0'К' 0'Р' 0'А' 0'С' 0'Н' 0'А' 0'Я' 0' ' \<256\> \<258\> 0'К' 0'А'.

При распаковке нужно придерживаться следующего правила. Словарь пополняется после считывания первого символа идущего за текущим кода, т.е. из фразы, соответствующей следующему после раскодированного коду, берется первый символ. Это правило позволяет избежать бесконечного цикла при раскодировании сообщений вида wKwK, где w - фраза, а K - символ. Конкретным примером такого сообщения является любая последовательность трех одинаковых символов, пары которых ранее не встречались.

\smallskip
\centerline{\vbox{\offinterlineskip\tt
\halign{\strut\hfil\ #\ \hfil&
        \vrule#& \hfil\ #\ \hfil&
        \vrule#& \hfil\ #\ \hfil&
        \vrule#& \hfil\ #\ \hfil\cr
ВХОДНОЙ КОД&& ПЕЧАТЬ&& СЛОВАРЬ&& ПОЗИЦИЯ СЛОВАРЯ\cr
\noalign{\hrule}
           && \omit && ASCII+ && 0-255\cr
0'К'       && "К"   && "КР"   && 256\cr
0'Р'       && "Р"   && "РА"   && 257\cr
0'А'       && "А"   && "АС"   && 258\cr
0'С'       && "С"   && "СН"   && 259\cr
0'Н'       && "Н"   && "НА"   && 260\cr
0'А'       && "А"   && "АЯ"   && 261\cr
0'Я'       && "Я"   && "Я "   && 262\cr
0' '       && " "   && " К"   && 263\cr
<256>      && "КР"  && "КРА"  && 264\cr
<258>      && "АС"  && "АСК"  && 265\cr
0'К'       && "К"   && "КА"   && 266\cr
0'А'       && "А"   && \omit  && \omit\cr}}}
\smallskip

Упражнение 32 Распаковать каждое приведенное сообщение и рассчитать длину кода каждого сжатого сообщения в битах. Сообщение, сжатое LZ77 (словарь - 12 байт, буфер - 4 байта), - \<0,0,'A'\> \<0,0,'F'\> \<0,0,'X'\> \<9,2,'F'\>
\<8,1,'F'\> \<6,2,'X'\> \<4,3,'A'\>. Сообщение, сжатое LZSS (словарь - 12 байт, буфер - 4 байта), - 0'A' 0'F' 0'X' 1\<9,2\> 1\<8,2\> 1\<6,3\>
1\<4,4\> 1\<9,1\>. Сообщеие, сжатое LZ78 (словарь - 16 фраз), - \<0,'A'\> \<0,'F'\> \<0,'X'\> \<1,'F'\> \<2,'X'\> \<5,'A'\> \<3,'A'\>
\<2,'F'\> \<0,'A'\>. Сообщение, сжатое LZW (словарь - ASCII+ и 16 фраз), - 0'A' 0'F' 0'X' \<256\> \<257\> \<257\> 0'A' \<258\> 0'F' 0'F'
0'A'.

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >