
- •7.1 Алгоритм lz77
- •7.2 Алгоритм lzss
- •7.3 Алгоритм lz78
- •7.4 Алгоритм lzw
- •Розв'язання
- •Розв'язання
- •Розв'язання
- •Розв'язання
- •8.1 Огляд типів систем стиснення інформації
- •8.2 Стиснення без втрат інформації
- •8.3 Стиснення із втратами інформації
- •9.1 Основні принципи
- •9.2 Елементи двійкової арифметики
- •9.3 Код з перевіркою на парність
- •9.4 Ітеративний код
- •Розв'язання
- •Розв'язання
- •10.1 Способи задання лінійних кодів. Твірна матриця лінійного блокового коду
- •10.2 Перевірна матриця лінійного блокового коду
- •10.3 Кодовий синдром і виявлення помилок лінійним блоковим кодом
- •10.4 Синдромне декодування лінійних блокових кодів
- •10.5 Вага і відстань Хеммінга. Можливості лінійних кодів виявляти і виправляти помилки
- •Розв'язання
- •Розв'язання
- •Розв'язання
- •12.1 Операції над поліномами в полі двійкових символів gf(2)
- •12.2 Поліноміальні коди
- •12.3 Циклічні коди
- •12.4 Синдром і виправлення помилок у циклічних кодах
- •12.5 Твірна і перевірна матриці циклічного коду
- •12.6 Способи декодування циклічного коду
- •Розв'язання
- •Розв'язання
- •Розв'язання
7.3 Алгоритм lz78
Авторами LZ77 був розроблений алгоритм LZ78, позбавлений недоліків LZ77 і LZSS. Цей алгоритм не використовує вікно, а зберігає словник із фраз повідомлення, що вже проглянуто.
При старті алгоритму словник містить тільки один порожній рядок. Алгоритм зчитує символи повідомлення до того часу, поки накопичуваний підрядок повністю збігається з однією із фраз словника. Як тільки зчитаний підрядок перестає відповідати фразі словника, алгоритм генерує код з індексу фрази у словнику, що до останнього зчитаного символу містила вхідний підрядок, і символу, що порушив збіг. Потім зчитаний новий підрядок заноситься у словник, і пошук збігу наступного підрядка з однією із фраз словника починається знову. Якщо словник вже заповнений, то з нього видаляють фразу, що найменше використовується у порівняннях.
Для
визначення розміру кодів ключовим є
розмір словника, оскільки кожний код
за алгоритмом LZ78
містить номер фрази у словнику. Звідси
випливає, що коди алгоритму мають
постійну довжину, яка дорівнює округленому
до більшого цілого
+8,
де 8
- кількість бітів для кодування наступного
символу, що йде за підрядком, що збігається,
за таблицею ACSII+.
Приклад 3 (а) Закодуємо за алгоритмом LZ78 рядок «КРАСНАЯ КРАСКА», використовуючи словник довжиною 16 фраз.
Кодування повідомлення ілюструється табл. 2.17.
Таблиця 2.17
Вхідна фраза (словник) |
Код |
Індекс фрази |
«» |
|
0 |
«К» |
<0, ‘К’> |
1 |
«Р» |
<0, ‘Р’> |
2 |
«А» |
<0, ‘А’> |
3 |
«С» |
<0, ‘С’> |
4 |
«Н» |
<0, ‘Н’> |
5 |
«АЯ» |
<3, ‘Я’> |
6 |
« » |
<0, ‘ ’> |
7 |
«КP» |
<1, ‘Р’> |
8 |
«АС» |
<3, ‘С’> |
9 |
«КА» |
<1, ‘А’> |
10 |
Покажчик на будь-яку фразу словника розміром 16 фраз – це ціле число від 0 до 15, для кодування якого двійковим рівномірним кодом потрібно 4 біти. Отже, довжина отриманого коду повідомлення Lcode=10(4+8) = 120 (бітів).
Приклад 3 (б) Розкодуємо повідомлення <0,‘К’><0,‘P’> <0,‘A’><0,‘C’><0,‘H’><3,‘Я’><0,‘ ’><1,‘P’><3,‘C’><1,‘A’>, закодоване за алгоритмом LZ78; довжина словника 16 фраз.
Розкодування повідомлення подане в табл. 2.18.
Таблиця 2.18
Вхідний код |
Вихід (словник) |
Індекс фрази |
|
«» |
0 |
<0, ‘К’> |
«К» |
1 |
<0, ‘Р’> |
«Р» |
2 |
<0, ‘А’> |
«А» |
3 |
<0, ‘С’> |
«С» |
4 |
<0, ‘Н’> |
«Н» |
5 |
<3, ‘Я’> |
«АЯ» |
6 |
<0, ‘ ’> |
« » |
7 |
<1, ‘Р’> |
«КP» |
8 |
<3, ‘С’> |
«АС» |
9 |
<1, ‘А’> |
«КА» |
10 |