Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

5.2. Методы архивации

.doc
Скачиваний:
45
Добавлен:
10.06.2015
Размер:
282.62 Кб
Скачать

6

Методы архивации

__________________________________________________________________________________

5.2. Методы архивации

Нужно писать так, чтобы словам было тесно,

а мыслям просторно.

Чехов А.П.

Несмотря на то, что объемы внешней памяти ЭВМ постоянно растут, потребность в архивации не уменьшается. Это объясняется тем, что архивация необходима не только для экономии места в памяти, но и для надежного хранения копий ценной информации, а также для быстрой передачи информации по сети на другие ЭВМ.

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

Архивация (архивирование) информации — это такое преобразование информации, при котором объем файла уменьшается, а количество информации, содержащейся в архиве, остается прежним.

Процесс записи файла в архивный файл называется архивированием (упаковкой, сжатием), а извлечение файла из архива — разархивированием (распаковкой). Упакованный (сжатый) файл называется архивом.

Степень сжатия информации зависит от содержимого файла и формата файла, а также от выбранного метода архивации. Степень (качество) сжатия файлов характеризуется коэффициентом сжатия Kc, определяемым как отношение объема исходного файла Vo к объему сжатого файла Vc:

Чем больше величина Kc, тем выше степень сжатия информации.

Заметим, что в некоторых литературных источниках встречается определение коэффициента сжатия, обратное приведенному отношению.

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

В настоящее время разработано много алгоритмов архивации без потерь. Однако все они используют две простые идеи.

Первая идея, основанная на учете частот появления символов в тексте, была разработана Хаффманом (D.A. Huffman) в 1952 г. Она базируется на том факте, что в обычном тексте частоты появления различных символов неодинаковые.

При кодировании символов в ЭВМ используют кодовые таблицы. При этом каждый символ кодируется либо одним байтом (CP-1251, КОИ-8), либо двумя байтами (Unicode). Кодовые таблицы стандартизируют процедуру кодирования. Однако для передачи информации по каналу связи (или для долговременного хранения) можно использовать более сложную процедуру кодирования, которая обеспечит уменьшение размера файла при полном сохранении исходной информации. При архивации не используются стандартные кодовые таблицы, а создаются собственные. При этом вид кодовой таблицы каждый раз изменяется и зависит от содержания архивируемого документа.

При упаковке по методу Хаффмана часто встречающиеся символы кодируются (заменяются) короткими последовательностями битов, а более редкие символы — длинными последовательностями. К каждому сжатому архиву прикладывается таблица соответствия имеющихся символов и кодов (чисел), заменяющих эти символы. Архивы как бы отменяют стандартные кодовые таблицы.

Рассмотрим пример.

Предположим, что входной алфавит сообщения состоит всего из четырех символов: a, b, c, d, частоты появления которых в исходном (несжатом) документе равны соответственно: 1/2, 1/4, 1/8 и 1/8. Порядок кодирования по методу Хаффмана для указанного алфавита иллюстрируется таблицей:

Символ

Частота

Входной код (до архивации)

Выходной код (после архивации)

a

1/2

00

0

b

1/4

01

10

c

1/8

10

110

d

1/8

11

111

Текст abbadaca, представленный на входе кодом 00 01 01 00 11 00 10 00, после архивации будет иметь вид: 0 10 10 0 111 0 110 0. Таким образом, 16 бит исходного текста превратились в 14 бит упакованной информации. Заметим, что указанные в таблице частоты не отражают реальной статистической картины частот появления перечисленных букв английского алфавита, а взяты такими лишь для иллюстрации данной идеи (только для учебных целей).

Сжатие данных по методу Хаффмана производится в следующем порядке.

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

Вторая основная идея архивации состоит в учете того факта, что в файлах часто встречаются несколько подряд идущих одинаковых байтов, а некоторые последовательности байтов повторяются многократно. При архивации такие места файла можно заменить командами вида «повторить данный байт n раз» или «взять часть данных длиной k байтов, которая встречалась m байтов назад». Такой алгоритм архивации носит имя RLE (Run Length Encoding — кодирование путем учета повторений).

Понять идею этого метода упаковки позволяет следующий анекдот.

Один в прошлом известный полководец решил написать достаточно объемные мемуары. Составленные воспоминания звучали примерно так.

«Утром я вскочил на своего коня и помчался в штаб армии. Подковы коня издавали звуки «цок-цок-цок-цок-цок-цок-цок-цок-цок-цок-цок-цок-цок-цок-цок-цок …». Через двое суток я соскочил с коня и вошел в штаб».

Для увеличения объема литературного произведения словосочетание «цок» было написано «писателем» на двухстах страницах. Очевидно, что информативность «мемуаров» не изменилась бы, если вместо 200 страниц перечисления цокающих звуков было бы указано: «Затем следуют 64 000 раз звуки «цок-цок».

Проиллюстрируем эту же идею другим примером.

Пусть имеется следующее изображение звездного неба: на черном фоне видны редкие белые звезды. При растровом представлении неба информация в ЭВМ будет храниться в таком виде: черное-черное-черное-черное-черное-белое-черное-черное-черное-черное-черное и т. д.

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

Среди известных художественных произведений наибольшему сжатию методом RLE можно подвергнуть «Черный квадрат» Малевича К.С.

Рассмотрим детально метод архивации RLE.

Упакованная методом RLE последовательность состоит из управляющих байтов, за которыми следуют один или несколько байтов данных. При этом если старший бит управляющего байта равен 1, то следующий за ним байт данных нужно повторить при распаковке столько раз, сколько указано в оставшихся 7 битах управляющего байта.

Например, управляющий байт 10001001 говорит, что следующий за ним байт нужно повторить 9 раз, так как 10012 = 910.

Если старший бит управляющего байта равен 0, то при распаковке архива нужно взять несколько следующих байтов без изменений. Число байтов, которые берутся без изменений, указывается в оставшихся 7 битах. Например, управляющий байт 00000011 говорит, что следующие за ним 3 байта нужно взять без изменений.

Рассмотрим пример архивации методом RLE.

Пусть дана не запакованная последовательность из 12 байтов:

11111111 11111111 11111111 11111111 11111111 11110000

00001111 11000011 10101010 10101010 10101010 10101010.

В начале исходной двоичной последовательности 5 раз повторяется байт 11111111. Чтобы упаковать эти 5 байтов, нужно записать сначала управляющий байт 10000101, а затем повторяемый байт 11111111. В результате архивации этого фрагмента данных выигрыш составит 3 байта. Далее идут 3 разных (неповторяющихся) байта: 11110000 00001111 и 11000011. Чтобы их «упаковать», нужно записать управляющий байт 00000011, а затем указать эти 3 неповторяющихся байта. В результате архивации этого фрагмента двоичной последовательности получается увеличение объема архива на 1 байт. Далее в последовательности 4 раза повторяется байт 10101010. Для архивации этого фрагмента двоичных данных нужно сформировать управляющий байт 10000100 и записать повторяемый байт 10101010. Сжатие последнего фрагмента даст выигрыш 2 байта.

В результате такой архивации получена новая последовательность данных (архив), состоящая из 8 байтов:

10000101 11111111 00000011 11110000

00001111 11000011 10000100 10101010.

Таким образом, 12 байт исходной двоичной последовательности удалось сжать до 8 байт.

Данный метод может успешно использоваться для сжатия растровых графических изображений (BMP, PCX, TIF, GIF), так как картинки и фотографии содержат много повторяющихся байтов. Недостатком метода RLE является низкая степень сжатия файлов с малым числом повторяющихся байтов.

На рисунке показан пользовательский интерфейс одного из наиболее популярных архиваторов — WinZip.

Выделим важные возможности архиваторов:

• создание многотомных архивов с возможностью задания произвольного размера тома;

• создание самораспаковывающихся SFX-архивов;

• создание пароля для доступа к архиву.

Выполним архивацию фразы

ИНН 222221433

Десятичный код

таблица CP-1251

Двоичный код

Архив

И

200

11001000

00000001

Н

205

11001101

11001000

Н

205

11001101

10000010

32

00100000

11001101

2

50

00110010

00000001

2

50

00110010

00100000

2

50

00110010

10000101

2

50

00110010

00110010

2

50

00110010

00000010

1

49

00110001

00110001

4

52

00110100

00110100

3

51

00110011

10000010

3

51

00110011

00110011

Контрольная сумма

1010 0110

Контрольная сумма

A6