Общие принципы работы архиваторов

С того момента, как информация стала переводиться в электронную форму, возникла новая и достаточно сложная проблема. С одной стороны, манипулирование электронными данными стало значительно удобнее и быстрее. Однако, в то же время, достигнутый эффект оказался обманчивым. Выиграв в самом начале, технология породила процесс почти неконтролируемого роста объема электронных файлов. Причем увеличился размер не только операционной системы или пользовательских приложений, создаваемые этими программами рабочие файлы также выросли.
Кроме того, в той или иной электронной форме появились и получили широкое распространение иллюстрации, фотографии, музыкальные композиции, кинофильмы, чертежи, компьютерные игры и многое другое. Достаточно быстро эта информация не только заняла некогда освободившиеся объемы, но и превысила их. Так, согласно практическим наблюдениям, жесткий диск емкостью порядка двух с половиной мегабайт полностью заполняется примерно за шесть-восемь месяцев обычной эксплуатации. Для решения этой проблемы были созданы специализированные программы для упаковки данных. Эти программы получили наименование архиваторов.

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

110110110110

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

КЛЮЧ\повтор\повтор\повтор\

Где под ключом обозначается участок 110, а символ повтора означает, что на его месте должен находиться тот ключ, что и в предыдущем. Если условно сказать, что повтор обозначается как 1, то исходный фрагмент преобразуется в:

110111

В результате из последовательности длиной двенадцать бит получается последовательность в шесть бит. То есть применение алгоритма кодирования позволило сжать исходный файл в два раза.

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

Собственно говоря, архиваторы уже достаточно давно получили широкое распространение. В частности, даже в операционную систему Microsoft Windows встроен модуль DriveSpice, принцип работы которого основан на динамическом применении алгоритмов сжатия в процессе функционирования самой операционной системы. В случае его установки и активизации Microsoft Windows, при каждом обращении к жесткому диску, он будет упаковывать данные перед операцией записи и распаковывать их при операции чтения. Так как DriveSpice совершенно прозрачен для пользовательских приложений, то его использование как бы увеличивает емкость имеющихся магнитных носителей.

Однако средствами DriveSpice полностью решить проблему эффективного сжатия данных невозможно. Прежде всего потому, что эта утилита значительно уступает специализированным программам данной области по одному из самых важных параметров - плотности упаковки. Иными словами, один и тот же объем одних и тех же неупакованных файлов различными архиваторами сжимается в разной степени. Эта разница может достигать пятидесяти процентов, что более чем значительно.

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

1101101

Однако его длина составляет семь бит, что на единицу больше, чем в первом варианте кодирования. Специализированные программы-архиваторы основываются на более совершенных алгоритмах, поэтому они работают эффективнее.

Вторым, после плотности упаковки, важнейшим показателем эффективности архиватора является время упаковки или распаковки. Действительно, какой прок в высокоэффективной программе сжатия, если результат ее работы появится через несколько лет? Так как первые архиваторы значительно различались между собой и по плотности и по времени упаковки, то в эпоху DOS вокруг их показателей кипели жаркие споры. Однако достаточно быстро стало ясно, что любой, даже самый эффективный алгоритм, чрезвычайно сильно зависит от того, какие данные он будет упаковывать. Текстовые файлы сжимаются значительно сильнее, чем, например, фотография или музыкальная запись. На самом деле текст состоит из весьма ограниченного количества символов. Так, русский текст формируется из тридцати двух букв алфавита и небольшого числа специальных символов, типа запятой, тире и так далее. Пробел между словами также может быть представлен как специальный символ. Следовательно, все многообразие слов любого произведения может быть заменено не более чем шестьюдесятью четырьмя кодовыми знаками. В случае кодирования музыки или графики степень упорядочения данных на несколько порядков меньше, стало быть резко снижается и возможность вычленить среди них подобные участки равной длины. Таким образом один и тот же алгоритм может достичь разных результатов при обработке разных данных.

По мере совершенствования алгоритмов сжатия среди всего многообразия применявшихся программ-архиваторов сформировался своего рода топ-лист лидеров de facto. Среди них оказались архиваторы ZIP, RAR, ARJ и некоторые другие. Так как операционная система Microsoft Windows 95 поддерживала так называемый DOS-режим, то до некоторого времени было возможно использовать в среде Windows программы, созданные только для DOS. Однако их эксплуатация была связана с некоторыми серьезными неудобствами. В частности, DOS-приложения не поддерживали длинные имена файлов, а также имена, содержащие символы кириллицы. Кроме того, постоянная необходимость "выходить в DOS" для обращения к архиву также не могла доставить удовольствие пользователям Windows.

Все это вместе взятое инициализировало создание архиваторов и для новой операционной системы фирмы Microsoft. Естественно, что в самую первую очередь для Microsoft Windows были переработаны лидирующие архиваторы ввиду их широкого распространения среди пользователей. Далее мы рассмотрим две из них, пользующиеся наибольшей популярностью: WinZIP и WinRAR 95.

Достаточно бессмысленно определять, какая из них является самой лучшей. Во-первых, различия в эффективности их применения сколько-нибудь заметно проявляются лишь при архивации очень больших объемов, порядка нескольких сотен мегабайт, однородных файлов. В реальных условиях подобное происходит крайне редко. Гораздо чаще архивации подвергаются разнородные данные, что в значительной мере нивелирует преимущества и недостатки использованных математических и программных алгоритмов. Может возникнуть мысль, что целесообразно иметь несколько архиваторов для разных типов данных. Однако практически такое еще менее удобно, так как перед обращением к данным приходится еще определять, каким инструментом это делать, и проводить предварительную сортировку файлов.

Если просуммировать все эти обстоятельства, то при выборе архиватора прежде всего следует руководствоваться следующими критериями:

a) Какой тип архивов уже существует в рамках той рабочей группы, в которой вам предстоит взаимодействовать. Если речь идет о выборе архиватора для личного использования, то этот критерий отпадает.

b) Какие объемы предполагается сжимать. Если единовременный набор файлов велик или если впоследствии архивы будут переноситься между компьютерами любым другим способом, кроме локальной вычислительной сети, то целесообразно выяснить, поддерживает ли конкретный архиватор такую опцию, как создание большого архива в виде нескольких томов малого объема. Обычно, если такая опция поддерживается, то в интерфейс программы уже заранее встроена возможность создания томов размера, кратного наиболее популярным носителям данных, например трехдюймовой дискете емкостью 1,44 Мб.

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

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

Александр Запольскис


Компьютерная газета. Статья была опубликована в номере 43 за 1998 год в рубрике разное :: мелочи жизни

©1997-2024 Компьютерная газета