Автор: Пользователь скрыл имя, 11 Ноября 2011 в 19:10, реферат
Архиваторы - это программы для создания архивов. Архивы предназначены для хранения данных в удобном компактном виде. В качестве данных обычно выступают файлы и папки. Как правило, данные предварительно подвергаются процедуре сжатия или упаковки. Поэтому почти каждый архиватор одновременно является программой для сжатия данных. С другой стороны, любая программа для сжатия данных может рассматриваться как архиватор. Эффективность сжатия является важнейшей характеристикой архиваторов. От нее зависит размер создаваемых архивов. Чем меньше архив, тем меньше места требуется для его хранения. Для передачи нужна меньшая пропускная способность канала передачи или затрачивается меньшее время. Преимущества архивов очевидны, если учесть, что данные уменьшаются в размере и в 2 раза, и в 5 раз.
Сильное влияние
оказывает и подбор оптимальных
параметров сжатия. Например, по данным
www.maximumcompression.com, используещего оптимальные
параметры сжатия для каждого набора данных,
разница между 7-zip и RAR около 3%, что значительно
меньше разницы, полученной в данном тестировании.
Общие принципы архивации.
Классификация методов
Следующей большой
темой является архивация данных.
Как Вам известно, подавляющее
большинство современных
Зачем же нужна
архивация в криптографии? Дело
в том, что в современном
криптоанализе, то есть науке о противостоянии
криптографии, с очевидностью доказано,
что вероятность взлома криптосхемы при
наличии корреляции между блоками входной
информации значительно выше, чем при
отсутствии таковой. А алгоритмы сжатия
данных по определению и имеют своей основной
задачей устранение избыточности, то есть
корреляций между данными во входном тексте.
Все алгоритмы сжатия
данных качественно делятся на 1)
алгоритмы сжатия без потерь, при
использовании которых данные на
приемной восстанавливаются без
малейших изменений, и 2) алгоритмы сжатия
с потерями, которые удаляют из
потока данных информацию, незначительно
влияющую на суть данных, либо вообще невоспринимаемую
человеком (такие алгоритмы сейчас разработаны
только для аудио- и видео- изображений).
В криптосистемах, естественно, используется
только первая группа алгоритмов.
Существует два основных метода архивации без потерь:
алгоритм Хаффмана (англ. Huffman), ориентированный на сжатие последовательностей байт, не связанных между собой,
алгоритм Лемпеля-Зива
(англ. Lempel, Ziv), ориентированный на сжатие
любых видов текстов, то есть использующий
факт неоднократного повторения "слов"
– последовательностей байт.
Практически все
популярные программы архивации
без потерь (ARJ, RAR, ZIP и т.п.) используют
объединение этих двух методов –
алгоритм LZH.
Алгоритм Хаффмана
Алгоритм основан
на том факте, что некоторые символы
из стандартного 256-символьного набора
в произвольном тексте могут встречаться
чаще среднего периода повтора, а
другие, соответственно, – реже. Следовательно,
если для записи распространенных символов
использовать короткие последовательности
бит, длиной меньше 8, а для записи
редких символов – длинные, то суммарный
объем файла уменьшится.
Хаффман предложил
очень простой алгоритм определения
того, какой символ необходимо кодировать
каким кодом для получения
файла с длиной, очень близкой
к его энтропии (то есть информационной
насыщенности). Пусть у нас имеется
список всех символов, встречающихся
в исходном тексте, причем известно
количество появлений каждого символа
в нем. Выпишем их вертикально
в ряд в виде ячеек будущего
графа по правому краю листа (рис.
1а). Выберем два символа с
Рис.1.
В теории кодирования
информации показывается, что код
Хаффмана является префиксным, то есть
код никакого символа не является
началом кода какого-либо другого
символа. Проверьте это на нашем
примере. А из этого следует, что
код Хаффмана однозначно восстановим
получателем, даже если не сообщается
длина кода каждого переданного
символа. Получателю пересылают только
дерево Хаффмана в компактном виде,
а затем входная
Алгоритм Лемпеля-Зива
Классический алгоритм
Лемпеля-Зива – LZ77, названный так
по году своего опубликования, предельно
прост. Он формулируется следующим
образом : "если в прошедшем ранее выходном
потоке уже встречалась подобная последовательность
байт, причем запись о ее длине и смещении
от текущей позиции короче чем сама эта
последовательность, то в выходной файл
записывается ссылка (смещение, длина),
а не сама последовательность". Так
фраза "КОЛОКОЛ_ОКОЛО_КОЛОКОЛЬНИ"
закодируется как "КОЛО(-4,3)_(-5,4)О_(-14,7)
Распространенный метод сжатия RLE (англ. Run Length Encoding), который заключается в записи вместо последовательности одинаковых символов одного символа и их количества, является подклассом данного алгоритма. Рассмотрим, например, последовательность "ААААААА". С помощью алгоритма RLE она будет закодирована как "(А,7)", в то же время ее можно достаточно хорошо сжать и с помощью алгоритма LZ77 : "А(-1,6)". Действительно, степень сжатия именно такой последовательности им хуже (примерно на 30-40%), но сам по себе алгоритм LZ77 более универсален, и может намного лучше обрабатывать последовательности вообще несжимаемые методом RLE.