Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАСТ.doc
Скачиваний:
3
Добавлен:
05.09.2019
Размер:
354.3 Кб
Скачать

Алгоритм Хаффмана

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

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

Основная идея состоит в следующем: чем чаще встречается символ, тем меньшим количеством бит он кодируется.

Например, буква 'А' входит 10 раз, буква 'В' - 8 раз, 'С'- 6 раз , 'D' - 5 раз, 'Е' и 'F' - по 4 раза.

Символ

Частота

Битовый код

A

10

00

B

8

01

C

6

100

D

5

101

E

4

110

F

4

111

В данном случае, под букву A отводится меньший код, под F – больший.

В алгоритме Хаффмана коды удовлетворяют свойству префикса, то есть, иначе говоря, исключена возможность неправильного декодирования.

§5. Архиваторы

7-Zip

7-Zip — свободный файловый архиватор с высокой степенью сжатия данных. Поддерживает несколько алгоритмов сжатия и множество форматов данных, включая собственный формат 7z c высокоэффективным алгоритмом сжатия LZMA. Программа разрабатывается с 1999 года и является бесплатной, а также имеет открытый исходный код, большая часть которого свободно распространяется на условиях лицензии GNU LGPL, за исключением кода декомпрессора unRAR, который имеет ограничения. Основной платформой является Windows (в том числе Windows CE), где доступны две версии программы: с графическим интерфейсом и версия для командной строки. Консольная версия была портирована сообществом разработчиков для систем стандарта POSIX под общим названием p7zip. Портированные версии для других систем, так же как и оригинальная программа 7-zip, доступны на сайте системы SourceForge (по состоянию на 7 ноября 2010 года программа была скачана с сайта более 109 миллионов раз). 7-Zip является победителем SourceForge.net Community Choice Awards 2007 года в категориях: лучший проект и лучший технический дизайн.

Основные характеристики

  • Поддерживаемые алгоритмы:

LZMA, LZMA2, PPMd, Bzip2, Deflate и Deflate64

  • Поддерживаемые форматы:

  • упаковка и распаковка: 7z, BZIP2 (BZ2, TB2, TBZ, TBZ2), GZIP (GZ, TGZ), TAR, ZIP, XZ;

  • только распаковка: 001, ARJ, CAB, CHM, CPIO, DEB, DMG, FLV, ISO, JAR, LHA, LZH, LZMA,MSI, NSIS, PE, RAR, RPM, SWF, SWM, VHD, WIM, XAR, Z (TAZ); FAT, HFS, MBR, NTFS, UDF, SquashFS, CramFS

  • Очень высокая степень сжатия в новом формате 7z благодаря использованию усовершенствованного алгоритма Лемпела-Зива.

  • Для форматов ZIP и GZIP степень сжатия на 2—10 % выше, чем у PKZIP и WinZip.

  • Возможность создания самораспаковывающихся архивов для формата 7z.

  • В формате 7z возможно создавать многотомные архивы (за исключением самораспаковывающихся).

  • Возможность шифрования алгоритмом AES-256 для архивов формата 7z и ZIP.

  • Интеграция в оболочку Microsoft Windows и Windows NT.

  • Плагин для программы FAR Manager.

  • Плагин для программ Total Commander и Unreal Commander (wcx).

  • Встроенная утилита для тестирования производительности (только для Windows).

  • Мультиязычный графический интерфейс (только для Windows) с функциями двухоконного файлового менеджера.

  • Мощная версия для командной строки.

  • Специальная версия для 64-разрядных операционных систем Windows.

  • Поддержка кодировки Юникод для имен файлов.

Cжатие

7-Zip использует многопоточность и позволяет задействовать для сжатия, в зависимости от алгоритма или формата различное количество потоков. При создании архивов, в которых файлы могут сжиматься независимо друг от друга (например, ZIP), программа может использовать до 8 потоков одновременно. Для алгоритма сжатия LZMA архиватор одновременно может использовать до 2 потоков. Невозможность использования большего их количества объясняется последовательным характером непрерывного сжатия. Алгоритм сжатия LZMA2 не обладает этим недостатком.

При сжатии в формате 7z используются также специальные фильтры-нормализаторы. Так, для более оптимального сжатия 32-битного x86 кода используются нормализующие конверторы BCJ и BCJ2. Программа также имеет оптимизирующий дельта-конвертер для некоторых типов мультимедиаданных, например несжатых 24-битных изображений.

Результаты по степени сжатия сильно зависят от сжимаемых данных. Обычно 7-Zip сжимает в формат 7z на 4—25 % лучше, чем в формат zip .

7-Zip 4.65 занимает 24 место в рейтинге архиваторов по степени сжатия, для сравнения популярные WinRAR 3.80 и WinZip 12 занимают 32 и 34 место соответственно. Лидеры же рейтинга PAQ более известен в своей GUI-модификации KGB и WinRK имеют на порядок большее время сжатия.

Достоинства

  • бесплатное ПО с открытым исходным кодом, распространяемое по свободной лицензии GNU LGPL (кроме распаковщика unRAR, лицензия которого запрещает восстановление алгоритма сжатия RAR);. Вследствие этого — поддержка множества платформ.

  • открытый формат архива и алгоритм сжатия.

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

  • высокая скорость распаковки (для архивов с методом сжатия LZMA). По данным автора:

  • скорость распаковки достигает 20-30 мегабайт в секунду на 2 ГГц процессоре класса Intel Core 2 или AMD Athlon 64.

  • скорость распаковки порядка 1-2 мегабайт в секунду при использовании процессоров ARM, MIPS, PowerPC и подобных при частоте 200 МГц.

  • многопоточное сжатие. Если на одноядерном процессоре скорость 7-Zip близка к WinRARHYPERLINK \l "cite_note-9"[10], то на двухъядерном 7-Zip намного быстрее;

  • поддержка шифрования AES-256;

  • поддержка 64-битных систем;

  • в программе имеется множество точных настроек алгоритмов сжатия, для неопытных пользователей есть готовые предустановки;

  • общий объём файлов в одном архиве формата 7z может составлять 16 эксабайт;

  • Существует открытое 7-Zip API, позволяющее интегрировать 7-zip с другими программными продуктами.

Недостатки

При запуске в окне программы 7-Zip исполнимого файла, сопутствующие файлы, необходимые для его работы, не распаковываются во временную папку. Некоторые повреждённые (битые) или не полностью скачанные архивы 7-zip невозможно открыть так как если в архиве изменится хотя бы 1 бит то программа отказывается узнавать такой архив как архив .7z. У таких архивов невозможно ни ознакомиться со списком сжатых файлов, ни разархивировать файлы, которые находятся в частично скачанной части (например, WinRAR позволяет это делать со своими не полностью скачанными архивами). Аналогично, при распаковке (склейке) файлов из кусков (file01.zip, file02.zip …) нельзя узнать какой именно архив повредился. (p7zip) Не сохраняются владелец и группа файла POSIX. Для этого можно использовать p7zip совместно с tar. Нет возможности сохранять альтернативные потоки и права доступа NTFS. Нет системы автоматического выбора алгоритмов для сжатия блока (части файла), в зависимости от информативности данных . Не добавляется информация для восстановления — только информация для проверки корректности распаковки

LZMA (англ. Lempel-Ziv-Markov chain-Algorithm) — алгоритм сжатия данных, разрабатываемый с 2001 года. Используется в архиваторе 7-Zip для создания сжатых архивов в формате 7z, а также в архиваторе FreeArc с форматом Arc. Так же lzma — бесплатная свободная утилита командной строки (а также алгоритм) с открытым исходным кодом для сжатия данных. Алгоритм основан на схеме сжатия данных по словарю, сходной с использованной в LZ77, и обеспечивает высокий коэффициент сжатия (обычно превышающий коэффициент, получаемый при сжатии с использованием bzip2), а также позволяет использовать словари различного размера (до 4 Гб).

WinRAR

WinRAR — это архиватор файлов в формат RAR и ZIP для 32-битных и 64-разрядных операционных систем Windows и Pocket PC с высокой степенью сжатия. Является одним из лучших архиваторов по соотношению степени сжатия к скорости работы.Распространяется по shareware-лицензии. Версия для платформы Pocket PC имеет лицензию Freeware.

Основные возможности

  • Создание архивов форматов RAR и ZIP.

  • Распаковка файлов формата CAB, ARJ, LZH, TAR, GZ, ACE, UUE, BZIP2, JAR, ISO, 7z, Z.

  • Возможность шифрования архивов с использованием алгоритма AES (Advanced Encryption Standard) с длиной ключа 128 бит, при этом в качестве ключа шифрования используется хеш пароля с использованием алгоритма SHA-1.

  • Возможность работы с файлами размером до 8,589 млрд. (примерно 8 x 109) гигабайт.

  • Создание самораспаковывающихся, непрерывных и многотомных архивов.

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

  • Полная поддержка файловой системы NTFS и имён файлов в Юникоде.

  • Поддержка командной строки.

Версии

С версии 2.90 вводится поддержка нового формата архива — RAR3. Предыдущие версии не могут работать с новым форматом;

С версии 3.50 начинают поддерживаться темы оформления и скины, а также происходит корректное встраивание в контекстное меню на x64 Windows системах;

С версии 3.60 алгоритмом компрессии поддерживаются многоядерные процессоры и процессоры с технологиями Hyper-threading — это обеспечивает существенный прирост скорости сжатия;

C версии 3.70 архиватор официально совместим с Windows Vista, создаёт SFX-архивы с запросом привилегий;

C версии 3.80 теперь поддерживаются архивы ZIP, которые содержат имена файла Unicode в формате UTF-8;

С версии 3.90 появляется разделение на 32- и 64-битные версии программы. 64-битная версия работает только на 64-битных ОС Windows и даёт некоторый прирост производительности.

С версии 4.00 изменен алгоритм архивирования RAR, что в значительной степени повышает скорость распаковки. В зависимости от типа данных, скорость распаковки может быть выше на 30 %. Появляется менеджер паролей, который позволяет сохранять пароли архивов для дальнейшего использования.

WinZip

WinZip — условно-бесплатный файловый архиватор и компрессор для Microsoft Windows и Apple Mac OS X фирмы Corel. PKZIP является основным форматом, хотя поддерживаются и другие архивные форматы.

История

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

WinZip был создан в начале 1990 года как коммерческий графический интерфейс для PKZIP. Приблизительно в 1996 создатели WinZip включили код сжатия от проекта PKZIP, таким образом устраняя потребность в присутствии консольной версии.

С версии 6.0 до версии 9.0, зарегистрированные пользователи могли загружать новейшие версии программного обеспечения, используя первоначальную регистрационную информацию, и тем самым получая обновления бесплатно. Начиная с версии 10.0 система бесплатного обновления была отключена.[2] WinZip доступна в стандартной и профессиональной версии.

В мае 2006 года, корпорация Corel, известная своей линией продуктов WordPerfect и CorelDRAW, объявила, что завершила приобретение WinZip Computing.

До версии 11.2 была возможность включения с помощью внешних программ поддержки архивов ARC, ARJ.

С версии 14.5 стиль графической оболочки изменён на Ribbon-интерфейс.

В апреле 2011 года выпущена версия 15, поддерживающая русский язык. l

Возможности

  • Создание, дополнение, извлечение из архивов ZIP, а также собственного формата .zipx

  • Поддержка алгоритмов компрессии JPEG, LZMA (12.0), bzip2 (9.0), PPMd (10.0) и специальных алгоритмов для звуковых файлов (на основе WavPack), что позволяет уменьшить архив за счёт потенциального увеличения времени сжатия и извлечения (особенно при использовании PPMd).

  • Декомпрессия файлов .bz2, .rar, .iso, .img, 7-zip

  • Встроенная поддержка архивов LHA (.lha и .lzh)

  • Настраиваемая интеграция в оболочку Microsoft Windows.

  • Поддержка 128- и 256-битных ключей шифрования AES. Это позволило заменить менее надёжный метод шифрования PKZIP 2.0 используемый в ранних версиях. Версия 9 также осуществляет поддержку 64-битного шифрования в PKZIP.

Дополнительные возможности

  • Прямая запись архивов на CD / DVD

  • Автоматизация резервного копирования

  • Поддержка протокола FTP

  • Отправка ZIP архивов по электронной почте

  • Поддержка Юникода (c версии 11.2)

WinZip VS WinRAR

Результат: WinRAR значительно лучше архивирует файлы (кроме аудиофайлов) любых размеров. WinZip лучше архивирует аудио файлы, а видео фалы архивирует намного быстрей и в результате вес файла не слишком отличен. Итог: Спомощью WinRAR надо архивировать разнообразные документации и всякие офисные файлы небольшого размера, они будут быстро и качественно архивироваться. Если же архивировать "большие" файлы, то на это уйдет некоторое время, хотя "сожмутся" они хорошо. WinZip служит для арихивации файлов большого размера, хоть и результат будет не слишком "сжат", но очень быстро. WinZip идеально подходит для архивации аудиофайлов, и быстро и выгодно) Видеофайлы так же рекомендую архивировать "Зипом" результат в весе практически тотже, а времяво много раз сократится. Если Вам наплевать на степень сжатия и время тогда WinRAR создан для Вас) т.к. он более функциональный и легкий в использовании. Как вы видите, степень сжатия архиватором WinRAR выше у всех файлов, кроме аудиофайла. Большие файлы сжимаются архиватором WinRAR намного медленей чем WinZip. WinZip ко всему не толь во много раз быстрей сжал avi-файл, но и эфективней!

WinRAR vs 7-zip

Что сжимаем: Папка размером 1.8 гигабайта. В ней находятся веб-сервера, то есть 60% графики(jpg, gif, flash, png), 30% текстовых файлов (исходники, логи, темпы...), 5% приложений и 5% файлов баз данных, если брать общее количество файлов за 100% (по обьему графика конечно занимает 80%-90%). Шаг 1. Берем архиватор WinRAR, выставляем ему степень сжатия максимальную, и оставляем компьютер работать. Естественно что архиватор занимает практически все процессорное время, так что мне пришлось пойти попить чайку. И ровно через 2 часа 17 минут архив был создан, и весил он 984 мегабайта. Хорошая степень сжатия — почти в два раза. Это меня вполне устраивало 2 года, и до сих пор устраивает моих друзей. Ну благо тут все просто, так как все решается степенью сжатия — все примитивно просто и понятно секретарше .

Шаг 2. 7-ZIP. Здесь всё намного сложнее, так как архиватор позволяет самому указывать длину слова и словаря, и естественно степень сжатия. Для начала разберемся со всеми этими новыми для меня параметрами архивирования. Длина слова — это количество информации, которым шифруется один блок. Длина словаря определяет количество вариантов кодов, используемых при кодировании. Понятно, что при архивировании маленьких объемов не надо использовать большие словари.

Итак, имеем: при размере словаря 24 Мегабайта и размере слова 192 мы имеем наивысшую степень сжатия и наименьшее время среди подобных значений по степени сжатия.

Обьем на 1.8 гигабайта. Ставим на архивацию… Странно, архивация идёт, и можно работать (например загружать Macromedia Flash, OpenOffice). Архиватор вполне позволяет работать во время процесса архивирования. Естественно тормоза чувствуются, но ведь все работает, только медленнее. Это уже серьезный плюс в сторону этого архиватора. Итак, архивирование завершено. Это заняло у 7-ZIP 1 час 42 минуты, что на полчаса быстрее WinRAR. Второй большой плюс в сторону 7-ZIP, так как полчаса - это уже серьезное отличие. Смотрим объем. Итак, объем в 1.8 гигабайта архиватор 7-ZIP сжал до 472!!! мегабайт. WinRAR — 984, 7-ZIP — 472, в два раза лучше. И это притом, что процесс архивирования занял на полчаса меньше времени и позволял работать во время архивирования.