Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TA1_2.DOC
Скачиваний:
9
Добавлен:
02.11.2018
Размер:
444.42 Кб
Скачать

Конец пока

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

Инициализируем словарь,

Устанавливаем позицию на начало архива.

Пока не весь архив распакован, прчесть из архива очередное число pi ; найти строку

S, лежащую на позиции p в словаре. Записать S в конец распакованного текста.

Прочесть из архива следующее за p число a и отыскать в словаре строку u,

находящуюся на месте q. Записать в словаре s и [1] (s+ i-ый символ u).

Продвинуть текущую позицию на символ q.

Конец пока.

Заметим, что упаковщик сразу заносит расширенную строку в словарь, но при распаковке сразу этого сделать нельзя. Необходимо прочесть следующую строку. Поэтому для обеспечения одинаковой последовательности манипуляций со словарем расширенную строку для начала помещают во вспомогательный буфер, а в словарь заносят только на следующей ветке цикла.

Алгоритм lz

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

Данные в упакованном тексте делятся на две категории:

1) ссылки на словарь < размер, расстоояние >

2) неупорядоченные данные < размер, данные >

Каждой паре предметов префиксный бит определяет ее тип.

Данные – последовательность байтов, длина которых указана в поле “ размер” заголовка.

Последовательность неупакованных данных посылается только в том случае, когда кодируемая последовательность символов не встречается в словаре или встречается длиной 1 или 2.

В некоторых вариантах LZ-алгоритма в этом случае вместо пары < размер, данные >

передается только один символ (без кодирования, но с нулевым префиксным битом), и процесс

возобновляется со следующим символом.

Алгоритм LZW- удобнее.

Оба алгоритма можно оптимизировать.

  1. в LZ поле “размер” и “расстояние” можно кодировать по Хаффману.

  2. в LZW – ввести операции удаления из словаря, а также поддерживать словарь с различной длиной индекса. Можно отказаться от “жадной ” одношаговой стратегии и перейти к 2х – 3х

шаговой.

Построение словаря на предварительном проходе может дать улучшение на 5-15%, а может и ухудшить алгоритм.

Дельта – алгоритм

Метод дельта-кодирования – кодирования с предсказанием – обычно используется для кодирования графических файлов (формат bmp или tga). Поскольку изображение является довольно гладким, выгодно вместо значений RGB хранить закодированные по Хаффману границы соответствующих полей.

В этом случае кодируются разницы между пикселами.

Арифметическое кодирование

Этот метод позволяет отказаться от кодирования каждого символа целым числом бит.

В результате можно более эффектно использовать знание таблицы частот встречаемых символов. Это позволяет увеличить коэффициент компрессии на 5-15% по сравнению с алгоритмом Хаффмана за счет некоторого увеличения сложности вычислений.

Метод адаптивного арифметического кодирования позволяет избавиться от дополнительного статистического прохода при компрессии и от передачи таблицы частот.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]