Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 / архиваторы.docx
Скачиваний:
54
Добавлен:
05.06.2015
Размер:
356.35 Кб
Скачать

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

Мы рассмотрели лишь несколько наиболее известных алгоритмов сжатия данных, дабы дать читателям поверхностное представление о методах сжатия данных. Конечно же, самих алгоритмов сжатия разработано очень много, и их рассмотрение не входит в задачи данной публикации. Тем не менее при рассмотрении архиваторов WinRAR, WinZip и 7-Zip можно встретить упоминание о таких алгоритмах кодирования, как PPMd, LZMA и bzip2. А потому вкратце поясним, о чем идет речь.

Итак, начнем с метода PPM (PPMd — это одна из многочисленных вариаций метода PPM).

PPM (Prediction by Partial Matching) — это алгоритм сжатия данных без потерь, основанный на контекстном моделировании и предсказании (предсказание по частичному совпадению).

Метод PPM был предложен еще в 1984 году Клири (Cleary) и Уиттеном (Witten) и до настоящего времени широко используется, поскольку является одним из наиболее эффективных методов экономного кодирования.

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

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

Длина контекста, применяемого при предсказании, обычно очень ограниченна. Эта длина обозначается N и называется порядком контекста, или порядком модели PPM. Если предсказание символа по контексту из N символов не может быть произведено, то предпринимается попытка предсказать его с помощью контекста более низкого порядка. Рекурсивный переход к моделям с меньшим порядком реализуется, пока предсказание не произойдет в одной из моделей либо когда контекст приобретет нулевую длину (N = 0).

Сам алгоритм PPM лишь предсказывает значение символа, а непосредственное сжатие осуществляется такими алгоритмами, как алгоритм Хаффмана или арифметическое кодирование.

Отметим, что алгоритм PPM имеет множество вариаций и используется, в частности, в архиваторах WinRAR (алгоритмы PPMd и PPMII), 7-Zip (алгоритм PPMd) и WinZip (алгоритм PPMd).

Еще один часто применяемый алгоритм сжатия — это LZMA (Lempel-Ziv-Markov chain-Algorithm), который был разработан в 2001 году и является своеобразным вариантом алгоритма LZW. В этом алгоритме используется метод скользящего окна и интервального кодирования.

Алгоритм LZMA находит применение в архиваторах 7-Zip и WinZip.

Последний алгоритм, о котором мы упомянем, — это алгоритм bzip2, основанный на преобразовании Барроуза—Уилера (Burrows—Wheeler Transform, BWT). В алгоритме bzip2 преобразование BWT используется для превращения последовательностей многократно чередующихся символов в строки одинаковых символов, а затем применяется преобразование MTF, а в заключение — кодирование Хаффмана. Процесс BWT-преобразования очень прост — он выполняется в три этапа, которые мы рассмотрим на примере исходной информационной последовательности «BANAN».

На первом этапе составляется таблица всех циклических сдвигов входной строки. В нашем случае из строки «BANAN» мы получим путем циклического сдвига еще четыре строки: «ANANB», «NANBA», «ANBAN» и «NBANA».

На следующем этапе производится сортировка в алфавитном порядке всех полученных строк, включая исходную (табл. 2). На последнем этапе мы выписываем строку, полученную по последним символам (сверху вниз) всех отсортированных строк. То есть если все отсортированные строки представить в виде матрицы, то нужная нам строка образована последним столбцом этой матрицы. В нашем случае получим строку «BNNAA». Кроме того, для возможности восстановления исходной строки по преобразованной нам нужно запомнить еще и номер исходной строки в отсортированном списке строк. В нашем случае это третья строка, поэтому результат преобразования можно записать как BWT = («BNNAA», 3).

Важно, что в результате BWT-преобразования все повторяющиеся символы группируются вместе, что очень удобно для последующего кодирования.

Теперь посмотрим, как сделать обратное преобразование. Итак, мы имеем результат преобразования в виде «BNNAA», 3.

Сначала записываем в столбик нашу строку «BNNAA». Затем сортируем все символы этого столбца в алфавитном порядке. Далее, слева от полученного столбца записываем столбец «BNNAA» и производим сортировку в алфавитном порядке уже всех двухсимвольных строк. Далее дописываем к эти двум столбцам слева опять столбец «BNNAA» и производим сортировку в алфавитном порядке уже всех трехсимвольных строк. Процедуру продолжаем до тех пор, пока строки не будут содержать по пять символов. В отсортированной по пяти символам матрице находим третью строку (напомним, что номер три мы изначально запомнили), которая и будет представлять раскодированную последовательность символов (табл. 3).

Как видите, прямое и обратное BWT-преобразование реализуется очень просто.

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

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

Тестируемые архиваторы

WinRAR 4.2

Архиватор WinRAR — это Windows-версия архиватора RAR. Он предназначен для создания архивов в форматах RAR и ZIP. Кроме того, этот архиватор позволяет распаковывать архивы форматов 7Z, ACE, ARJ, BZIP2, CAB, GZ, ISO, JAR, LZH, TAR, UUE, Z.

Существует 32- и 64-разрядная версия WinRAR. В дальнейшем мы будем рассматривать только 64-битную версию.

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

Среди функций WinRAR также стоит выделить возможность создания самораспаковывающихся SFX-архивов, распаковать которые можно без всяких архиваторов. Кроме того, пользуясь WinRAR, можно надежно защитить содержимое архива от свободного просмотра и распаковки с помощью пароля.

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

При архивации WinRAR позволяет выбрать один из пяти вариантов сжатия (Store, Fastest, Fast, Normal, Good, Best). Вариант Store подразумевает отсутствие сжатия, а вариант Best — максимальную степень сжатия, но и максимальное время архивации.

Архиватор WinRAR является платным.

WinZip 17

Архиватор формата ZIP (PKZIP) был первоначально создан для MS-DOS в 1989 году компанией PKWare и сегодня является одним из самых распространенных. Версия WinZip появилась в 1990-м как коммерческий графический интерфейс для PKZIP.

В мае 2006 года корпорация Corel объявила о приобретении WinZip Computing.

В конце 2012-го компания WinZip Computing (подразделение компании Corel) представила новую русифицированную версию приложения WinZip 17, которая оптимизирована для многоядерных процессоров и поддерживает возможность использования вычислительных мощностей графических процессоров, встроенных в процессоры Intel Core третьего поколения, процессоры AMD A-Series APU, а также дискретные графические карты AMD Radeon и NVIDIA GeForce.

Архиватор WinZip 17 является 64-битным и позволяет создавать архивы в форматах ZIP и ZIPX, а также распаковывать архивы форматов 7Z, RAR, BZIP2, LHA/LZH, CAB, ISO и других (каких именно, в документации не уточняется).

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

Естественно, WinZip 17 позволяет создавать архив с дроблением его на тома заданного размера. Кроме того, можно использовать архивацию без сжатия, когда множество файлов и папок объединяются в один общий файл (архив).

Кроме того, поддерживается возможность шифрования архива (128- и 256-битное AES-шифрование).

При архивации WinZip позволяет задать уровень компрессии и алгоритм сжатия. Для формата ZIPX можно выбрать алгоритм PPMd, LZMA или bzip2, которые обеспечивают очень высокую степень сжатия. Кроме того, имеется вариант, называемый Best Method, предусматривающий максимальную степень сжатия. При выборе данного метода архиватор сам выбирает оптимальный алгоритм сжатия, обеспечивающий максимальную степень компрессии, в зависимости от типа файла.

Также отметим, что WinZip не имеет встроенной командной строки, однако в случае ее необходимости можно скачать дополнение WinZip Command Line Support Add-On Version 3.2, которое обеспечивает работу с командной строкой.

Архиватор WinZip является платным.

7-Zip 9.30

В отличие от архиваторов WinRAR и WinZip, архиватор 7-Zip абсолютно бесплатный. 7-Zip — это программное обеспечение с открытым кодом, при этом большая часть исходного кода находится под лицензией GNU LGPL.

Существует как 32-, так и 64-битная версии этого архиватора. Текущей версией, появившейся в конце 2012 года, является версия 9.30.

Архиватор 7-Zip имеет удобный графический интерфейс, но при этом поддерживает работу с командной строкой.

Основным форматом для архиватора 7-Zip является собственный формат 7Z с компрессией LZMA. Кроме того, 7-Zip позволяет производить архивирование/разархивирование в форматах ZIP, GZIP, BZIP2 и TAR. Также поддерживается разархивирование форматов ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR и Z.

Как утверждает производитель, архиватор 7-Zip обеспечивает степень сжатия выше, чем RAR, за исключением мультимедийных данных. Более того, считается, что по степени сжатия 7-Zip уступает только архиваторам PAQ и его GUI-модификации KGB, которые, однако, имеют на порядок большее время сжатия.

Для форматов ZIP и GZIP архиватор 7-Zip предлагает сжатие, которое на 2-10% лучше, чем предоставляемое архиваторами PKZip и WinZip

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

Отметим, что архиватор позволяет создавать самораспаковывающиеся архивы для формата 7z. Кроме того, поддерживается шифрование AES 256-бит.

Естественно, архиватор 7-Zip (как WinZip и WinRAR) интегрируется в проводник Windows и доступен через контекстное меню.

Еще одна особенность заключается в том, что в архиваторе 7-Zip предусмотрен плагин для FAR Manager.

Для своего родного формата 7z архиватор позволяет выбрать уровень сжатия (без сжатия, «Скоростной», «Быстрый», «Нормальный», «Максимальный», «Ультра»), а также задать алгоритм сжатия (LZMA2, LZMA, PPMd, BZip2).

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

Также поддерживается создание архивов, разбитых на тома заданного размера.

Соседние файлы в папке 1