Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведская ТМ / Теория по Инф.сетям / Компрессия данных.doc
Скачиваний:
60
Добавлен:
27.03.2016
Размер:
78 Кб
Скачать

Основные методы компрессии

Наиболее часто повторяющиеся блоки являются и наиболее "избыточными" (redundant) и могут быть представлены в более сжатом виде. На сегодняшний день существует множество различных алгоритмов сжатия данных, подразделяющихся на несколько основных групп:

* алгоритмы кодирования повторов; * вероятностные методы; * арифметические методы; * "метод словарей" (dictionary).

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

Кодирование повторов (Run-Length Encoding)

Этот метод, являющийся одним из старейших и наиболее простых, сегодня используется в основном для сжатия графических файлов: одним из самых распространенных форматов, организованных при помощи этого типа компрессии, является формат PCX.

"Классический" вариант этого метода предусматривает замену последовательности повторяющихся символов на строку, содержащую сам этот символ, и число, показывающее, сколько раз этот символ повторяется. Например, строка 'AAAAAACCCCCEEEFFFFFF' будет записана в виде: '6A5C3E6F'. В то же время применение этого метода для сжатия текстовых или исполняемых (EXE, COM) файлов оказывается неэффективным.

Вероятностные методы сжатия

К вероятностным методам относятся алгоритмы Шеннона-Фэно (Shannon-Fano) и Хаффмана (Huffman). В основе этих алгоритмов лежит идея построения "дерева", положение символа на "ветвях" которого определяется частотой его появления в файле. Каждому символу присваивается код, длина которого обратно пропорциональна частоте появления символа в файле. Рассмотрим пример использования метода Шэннона-Фэно:

Пусть имеется слово METHOD. Допустим, что частота появления символов определяется в виде (табл. 1). Здесь мы используем произвольные значения вероятности появления символов исходя из того, что наиболее часто встречающиеся буквы английского языка - E, O, H. В каждом реальном массиве данных частота появления символов может отличаться от приведенной нами, однако это не влияет на принцип работы метода.

Симвoл

Частота

Код

M

2

011

E

8

00

T

3

010

H

4

110

O

6

10

D

1

111

Таблица. 1. Коды символов в строке "METHOD" (алгоритм Шеннона-Фэно).

Разделим строку "METHOD" на две части так, чтобы суммы частот появления символов в них были приблизительно равны:

2(M)+8(E)+3(T)*4(H)+6(O)+1(D). Теперь начнем строить "дерево" по схеме: на каждой "ветви" порции символов с большей частотой будет присваиваться двоичный ноль, а с меньшей - двоичная единица (рис. 2). В результате, каждый из символов получает свой код, по которому к нему можно добраться с вершины "дерева", при этом чем чаще встречается символ в файле, тем ближе он к вершине дерева и, значит, тем короче его адресный код.

Метод Хаффмана очень похож на метод Шеннона-Фэно, но строительство "дерева" в нем начинается не с "вершины", а с "корней" (рис. 3). Сумма частот появлений двух самых редко встречающихся символов (D и М) равна 3, символов Н и Т - 7. Далее, присваивая ветвям дерева двоичные нули и единицы, так же, как и в предыдущем методе, поднимаемся к "вершине", получая код для каждого символа.

Существуют две разновидности статистических методов, различающихся способом определения вероятности появления каждого символа в файле: - статические (static), использующие фиксированную таблицу частоты появления символов в файле, рассчитываемую перед началом процесса сжатия; - адаптивные (adaptive), в которых частота появления символов все время меняется - по мере считывания нового блока данных из файла происходит перерасчет начальных значений частот.

Статистические методы, характеризующиеся хорошим быстродействием и не требующие значительных ресурсов оперативной памяти, нашли широкое применение в многочисленных программах-архиваторах, например, ARC, PkZip и др.