Реферат: работа по теме: «Программа для разархивации файла, созданного по алгоритму rle» - Refy.ru - Сайт рефератов, докладов, сочинений, дипломных и курсовых работ

работа по теме: «Программа для разархивации файла, созданного по алгоритму rle»

Остальные рефераты » работа по теме: «Программа для разархивации файла, созданного по алгоритму rle»

Московский государственный институт электроники и математики

(технический университет)

Кафедра ИКТ


Курсовая работа по теме:


«Программа для разархивации файла,

созданного по алгоритму RLE»


Выполнил студент группы С-15:

Захаров И.Д.

Проверил:


Москва – 2009


СОДЕРЖАНИЕ


ВВЕДЕНИЕ


3

1. ОБЩИЕ СВЕДЕНИЯ ОБ АРХИВАЦИИ (РАЗАРХИВАЦИИ) ФАЙЛОВ


4

1.1. Основные виды программ-архиваторов


5

1.2. Способы управления программой - архиватором


6

2. АЛГОРИТМ АРХИВАЦИИ RLE


7

2.1. Алгоритм декомпрессии


7

2.2. Характеристики алгоритма RLE:


7

3. РАЗРАБОТКА ПРОГРАММЫ ДЛЯ РАЗАРХИВАЦИИ ФАЙЛА, СОЗДАННОГО ПО АЛГОРИТМУ RLE


8

ЗАКЛЮЧЕНИЕ


10

СПИСОК ЛИТЕРАТУРЫ


11




ВВЕДЕНИЕ


Характерной особенностью большинства типов данных является их избыточность. Степень избыточности данных зависит от типа данных. Например, для видеоданных степень избыточности в несколько раз больше чем для графических данных, а степень избыточности графических данных, в свою очередь, больше чем степень избыточности текстовых данных. Другим фактором, влияющим на степень избыточности является принятая система кодирования. Примером систем кодирования могут быть обычные языки общения, которые являются ни чем другим, как системами кодирования понятий и идей для высказывания мыслей. Так, установлено, что кодирование текстовых данных с помощью средств русского языка дает в среднем избыточность на 20-25% большую чем кодирование аналогичных данных средствами английского языка.


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


В зависимости от того, в каком объекте размещены данные, подлежащие сжатию различают:

Сжатие (архивация) файлов: используется для уменьшения размеров файлов при подготовке их к передаче каналами связи или к транспортированию на внешних носителях маленькой емкости;

Сжатие (архивация) папок: используется как средство уменьшения объема папок перед долгим хранением, например, при резервном копировании;

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


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


ОБЩИЕ СВЕДЕНИЯ ОБ АРХИВАЦИИ (РАЗАРХИВАЦИИ) ФАЙЛОВ


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

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

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

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

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

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

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

Кс=(Vc/Vo)*100%


Сжатие сокращает объем пространства, требуемого для хранения файлов в ЭВМ, и количество времени, необходимого для передачи информации по каналу установленной ширины пропускания. Это есть форма кодирования. Другими целями кодирования являются поиск и исправление ошибок, а также шифрование. Процесс поиска и исправления ошибок противоположен сжатию, он увеличивает избыточность данных, когда их не нужно представлять в удобной для восприятия человеком форме. Удаляя из данных избыточность, сжатие способствует шифрованию, что затрудняет поиск шифра доступным для взломщика статистическим методом. В зависимости от результата кодирования сжатие разделяется на обратимое (первоначальные данные могут быть в точности восстановлены из сжатого состояния) и необратимое. Необратимое или ущербное сжатие используется для цифровой записи аналоговых сигналов, таких как человеческая речь или рисунки. Обратимое сжатие особенно важно для текстов, записанных на естественных и на искусственных языках, поскольку в этом случае ошибки обычно недопустимы. Хотя первоочередной областью применения рассматриваемых методов есть сжатие текстов, однако, эта техника может найти применение и в других случаях, включая обратимое кодирование последовательностей дискретных данных. Существует много веских причин выделять ресурсы ЭВМ в расчете на сжатое представление, т.к. более быстрая передача данных и сокращение пространства для их хранения позволяют сберечь значительные средства и зачастую улучшить показатели ЭВМ. Компрессия, вероятно, будет оставаться в сфере внимания из-за возрастающих объемов хранимых и передаваемых в ЭВМ данных, кроме того, его можно использовать для преодоления некоторых физических ограничений, таких как, например, сравнительно низкая ширина пропускания телефонных каналов. Одним из самых ранних и хорошо известных методов сжатия является алгоритм Хаффмана, который был и остается предметом многих исследований. Однако, в конце 70-х годов благодаря двум важным переломным идеям он был вытеснен. Одна заключалась в открытии метода «Арифметического кодирования», имеющего схожую с кодированием Хаффмана функцию, но обладающего несколькими важными свойствами, которые дают возможность достичь значительного превосходства в сжатии. Другим новшеством был метод Зива-Лемпела, дающий эффективное сжатие и применяющий подход, совершенно отличный от двух вышеупомянутых. Обе эти техники со времени своей первой публикации значительно усовершенствовались, развились и легли в основу практических высокоэффективных алгоритмов.

Существуют два основных способа проведения сжатия: статистический и словарный. Лучшие статистические методы применяют арифметическое кодирование, лучшие словарные метод используют Зива-Лемпела. В статистическом сжатии каждому символу присваивается код, основанный на вероятности его появления в тексте. Высоковероятные символы получают короткие коды, и наоборот. В словарном методе группы последовательных символов или «фраз» заменяются кодом. Замененная фраза может быть найдена в некотором «словаре». Не так давно было показано, что любая практическая схема словарного сжатия может быть сведена к соответствующей статистической схеме сжатия, и найден общий алгоритм преобразования словарного метода в статистический. Поэтому при поиске лучшего сжатия статистическое кодирование обещает быть наиболее плодотворным, хотя словарные методы и привлекательны своей быстротой

Степень сжатия зависит от используемой программы, метода сжатия и типа исходного файла. Наиболее хорошо сжимаются файлы графических образов, текстовые файлы и файлы данных, для которых степень сжатия может достигать 5 - 40%, меньше сжимаются файлы исполняемых программ и загрузочных модулей - 60 - 90%. Почти не сжимаются архивные файлы. Программы для архивации отличаются используемыми методами сжатия, что соответственно влияет на степень сжатия.

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

Разархивация (распаковка) - процесс восстановления файлов из архива точно в таком виде, какой они имели до загрузки в архив. При распаковке файлы извлекаются из архива и помещаются на диск или в оперативную память;

Программы, осуществляющие упаковку и распаковку файлов, называются программами – архиваторами.

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


1.1. Основные виды программ-архиваторов

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

ARJ, PKPAK, LHA, ICE, HYPER, ZIP, РАК, ZOO, EXPAND, разработанные за рубежом, а также AIN и RAR, разработанные в России. Обычно упаковка и распаковка файлов выполняются одной и той же программой, но в некоторых случаях это осуществляется разными программами, например, программа РКZIР производит упаковку файлов, a PKUNZIP - распаковку файлов.

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

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

Самораспаковывающийся архив получил название SFX - архив (SelF - eXtracting). Архивы такого типа в MS DOS обычно создаются в форме .ЕХЕ - файла.

Многие программы - архиваторы производят распаковку файлов, выгружая их на диск, но имеются и такие, которые предназначены для создания упакованного исполняемого модуля (программы). В результате такой упаковки создается программный файл с теми же именем и расширением, который при загрузке в оперативную память самораспаковывается и сразу запускается. Вместе с тем возможно и обратное преобразование программного файла в распакованный формат. К числу таких архиваторов относятся программы PKLITE, LZEXE, UNP.

Программа EXPAND, входящая в состав утилит операционной системы MS DOS и оболочки Windows, применяется для распаковки файлов программных продуктов, поставляемых фирмой Microsoft.

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


1.2. Способы управления программой - архиватором

Управление программой - архиватором осуществляется одним из двух способов:

с помощью командной строки, в которой формируется команда запуска, содержащая имя программы - архиватора, команду управления и ключи ее настройки, а также имена архивного и исходного файлов; подобное управление характерно для архиваторов ARJ, AIN, ZIP, РАК, LHA и др.;

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


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


АЛГОРИТМ АРХИВАЦИИ RLE

Данный алгоритм необычайно прост в реализации. Групповое кодирование — от английского Run Length Encoding (RLE) — один из самых старых и самых простых алгоритмов архивации графики. Изображение в нем вытягивается в цепочку байт по строкам растра. Само сжатие в RLE происходит за счет того, что в исходном изображении встречаются цепочки одинаковых байт. Замена их на пары <счетчик повторений, значение> уменьшает избыточность данных.

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


1 1 1 1 2 2 3 4 4 4


В алгоритме RLE предлагается заменить ее следующей структурой: 1 4 2 2 3 1 4 3, где первое число каждой пары чисел - это код данных, а второе - коэффициент повторения. Если для хранения каждого элемента данных входной последовательности отводится 1 байт, то вся последовательность будет занимать 10 байт памяти, тогда как выходная последовательность (сжатый вариант) будет занимать 8 байт памяти. Понятно, что алгоритм RLE будет давать лучший эффект сжатия при большей длине повторяющейся последовательности данных.

В случае рассмотренного выше примера, если входная последовательность будет иметь такой вид: 1 1 1 1 1 1 3 4 4 4, то коэффициент сжатия будет равен 60%. В связи с этим большая эффективность алгоритма RLE достигается при сжатии графических данных (в особенности для однотонных изображений).


2.1. Алгоритм декомпрессии


Алгоритм декомпрессии выглядит так:


Initialization(...);

do {

byte = ImageFile.ReadNextByte();

if(является счетчиком(byte)) {

counter = Low6bits(byte)+1;

value = ImageFile.ReadNextByte();

for(i=1 to counter)

DecompressedFile.WriteByte(value)

}

else {

DecompressedFile.WriteByte(byte)

} while(ImageFile.EOF());


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



Соответственно оставшиеся 6 бит расходуются на счетчик, который может принимать значения от 1 до 64. Строку из 64 повторяющихся байтов мы превращаем в два байта, т.е. сожмем в 32 раза.

Алгоритм рассчитан на деловую графику — изображения с большими областями повторяющегося цвета. Ситуация, когда файл увеличивается, для этого простого алгоритма не так уж редка. Ее можно легко получить, применяя групповое кодирование к обработанным цветным фотографиям. Для того, чтобы увеличить изображение в два раза, его надо применить к изображению, в котором значения всех пикселов больше двоичного 11000000 и подряд попарно не повторяются.

Данный алгоритм реализован в формате PCX.


2.3. Характеристики алгоритма RLE:


Коэффициенты компрессии: 32, 2, 0,5. (Лучший, средний, худший коэффициенты)


Класс изображений: Ориентирован алгоритм на изображения с небольшим количеством цветов: деловую и научную графику.


Симметричность: Примерно единица.


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


РАЗРАБОТКА ПРОГРАММЫ ДЛЯ РАЗАРХИВАЦИИ ФАЙЛА, СОЗДАННОГО ПО АЛГОРИТМУ RLE

string str1 = textBox1.Text/*закодированая часть*/, str = "", ch = "", s = "", symb = "";

int i, k = 0, j;

for (i = 0; i < str1.Length; ) {

ch = str1.Substring(i, 1); // текущий символ i

k = 0;

s = "";

if ("0123456789".Contains(ch)) /* если символ ch является цифрой */ {

for (j = i; j < str1.Length; j++) {

if ("0123456789".Contains(str1.Substring(j, 1))) {

s += str1.Substring(j, 1);

} else break;

}

symb = str1.Substring(j, 1); // получаем букву

i = j + 1;

} else i++;

if (s.Length != 0) {

for (j = 0; j < Convert.ToInt32(s); j++) // декодирование буквы

str += symb;

} else

str += Convert.ToString(ch);

}

out_shifr.Text = str;


Декодирование закодированной строки выполняется путем поиска числа, которое является количеством повторений символа

и самого символа.

И так, получаем закодированную строку из текстового поля “textBox1” и записывает полученный текст в переменную “str1”.

При каждом проходе цикла, который выполняется, пока недостигнут последний символ, записываем в переменную “ch” текущий

символ и если он является цифрой, выполняем поиск цифр идущих друг за другом. Тем самым последовательность найденных

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

последовательности. В конце в строковую переменную “str” записываем букву столько раз, сколько равно значение числа.


ЗАКЛЮЧЕНИЕ


Существует множество алгоритмов архивирования и разархивирования. Каждый из них по своему хорош. Каждым из них лучше всего архивирует определённый тип данных.

Мы же рассматриваем алгоритм RLE, он имеет наиболее частое применение в архивировании графических типов данных.


СПИСОК ЛИТЕРАТУРЫ


Д. Ватолин, А. Ратушняк, М. Смирнов, В. Юкин «Методы сжатия данных. Устройство архиваторов, сжатие изображений и видио».


Курс лекций "Основы информатики" Лекция 9 "Сжатие данных".


helloworld - документация и книги по программированию.


Методическое пособие МГУ Д.С. Ватолин «Алгоритмы cжатия изображений»