Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентация на тему LZ78.pptx
Скачиваний:
2
Добавлен:
29.08.2023
Размер:
832.89 Кб
Скачать

Алгоритм LZ78

Содержание

Введение

Основная часть

Кодирование

Декодирование

Преимущества

Заключение

Список источников

2

Введение

Алгоритмы LZ77 имели свои проблемы, с ростом размеров словаря скорость работы алгоритма- кодера пропорционально замедляется и кодирование одиночных символов очень неэффективно, поэтому создатели Абрахам Лемпель и Якоб Зив, в 1978 году предложили новую версию своего алгоритма, которая далее будет называться LZ78.

LZ78 уходит от идеи скользящего по тексту окна. В отличие от LZ77, в LZ78 словарем является потенциально бесконечный список уже просмотренных ФРАЗ, а не подстрок, как в LZ77.

Абрахам

Лемпель

Якоб Зив 3

Основная часть

В отличие от LZ77, работающего с уже полученными данными, LZ78 ориентируется на данные, которые только будут получены (LZ78 не использует скользящее окно, он хранит словарь из уже просмотренных фраз). Алгоритм считывает символы сообщения до тех пор,

пока накапливаемая подстрока входит

 

целиком в одну из фраз словаря. Как

 

только эта строка перестанет

 

соответствовать хотя бы одной фразе

 

словаря, алгоритм генерирует код,

 

состоящий из индекса строки в словаре,

 

которая до последнего введенного

 

символа содержала входную строку, и

4

символа, нарушившего совпадение.

Основная часть

Затем в словарь добавляется введенная подстрока. Если словарь уже заполнен, то из него предварительно удаляют менее всех используемую в сравнениях фразу. Если в конце алгоритма мы не находим символ, нарушивший совпадения, то тогда мы выдаем код в виде (индекс строки в словаре без последнего символа, последний символ).

5

Как же работает кодирование в алгоритме LZ78 ?

6

Кодирование

1.Начинаем с пустого словаря.

2.Производим поиск наиболее длинного соответствия между записями в словаре и началом кодируемого слова.

3.Передаем/сохраняем маркер, состоящий из номера индекса совпадения и следующего символа.

4.Если следующий символ - конец слова, то завершение алгоритма.

5.Добавляем символы, сохраненные в словаре.

6.Продолжаем с пункта 2.

7

Кодирование

Пример

Закодировать слово ABRACADABRARABARABA

Индекс

Результат

Входные

Словарь

 

 

данные

 

0

-

 

 

1

(0, A)

A

A

2

(0, B)

B

A,B

3

(0, R)

R

A,B,R

4

(1, C)

AC

A,B,R,AC

5

(1, D)

AD

A,B,R,AC,AD

6

(1, B)

AB

A,B,R,AC,AD,AB

7

(3, A)

RA

A,B,R,AC,AD,AB

 

 

 

,RA

8

(7, B)

RAB

A,B,R,AC,AD,AB

 

 

 

,RA,RAB

9

(1, R)

AR

A,B,R,AC,AD,AB

 

 

 

,RA,RAB,AR

10

(6, A)

ABA

A,B,R,AC,AD,AB

 

 

 

,RA,RAB,ABA

11

(0, EOF)

 

 

8

Как же работает декодирование в алгоритме LZ78 ?

9

Декодирование

Декодирование происходит аналогично кодированию, на основе декодируемой информации строим словарь и берем из него значения.

1.Начать с пустого слова и словаря, содержащего только пустое слово

2.Прочтите следующий символ и добавьте соответствующую запись словаря и следующий символ к декодированному слову

3.Добавить декодированные символы (совпадения + следующий символ) в словарь

4.Продолжить с пункта 2

10