Создан заказ №923533
12 января 2016
Создать программу архиватор
Как заказчик описал требования к работе:
Курсовая работа на С++ и рабочая программа позволяющая сжимать как отдельные файлы так и папки арифмитическим методом. В архивах хранить информацию о добавленных файлах-дата, время, размер до сжатия, размер после сжатия. Поддерживать контроль целостности!
Фрагмент выполненной работы:
Введение.
Проблема сжатия и кодирования информации появилась намного раньше, собственно, термин "информация". Вспомним, что по крайней мере во времена Римской империи армия использовала метод шифрования сообщений с целью ее защиты от врагов. Так называемый шифр Цезаря стал первым из известных на сегодня методов шифрования с секретным ключом. Другим примером кодирования является письменность, возникшая недавно, что точных данных о конкретном времени ее появления не существует и, вероятно, никогда не будет найдено.
Во второй половине ХХ века с изобретением и развитием ЭВМ проблема сжатия и кодирования привлекла к себе внимание, потому что с чисто теоретической превратилась в прикладную и крайне необходимой. (работа была выполнена специалистами Автор 24) Стремительно выросли объемы данных, появилась потребность в передаче дискретной информации на дальние расстояния с достаточной надежностью, проблема защиты такой информации от несанкцианированого доступа и т. д. С развитием компьютерных сетей (в частности, INTERNET) объем информации быстро растет и требует ее минимизации путем специфического кодирования для поддержания быстродействия сети. Можно привести много других применений кодирования информации.
Арифметическое кодирование является одним из перспективных методов сжатия информации, и, в некотором смысле, ее шифрования. Это кодирование позволяет упаковывать символы входного алфавита при условии, что распределение частот этих символов известен. Концепция метода была разработана Элиасом в 60-х годах. После этого метод был существенно развит и усовершенствован. Арифметическое кодирование является оптимальным, достигает теоретической границы степени сжатия, - энтропии входного потока.
2. Идея арифметического кодирования.
При арифметическом кодировании текст представляется числами с плавающей запятой в диапазоне от 0 до 1. В процессе кодирования текста интервал, его отражает - уменьшается, а количество битов для его представления увеличивается. Следующие символы текста уменьшают величину интервала, исходя из значений их вероятностей, определяемых моделью. Более вероятные символы делают это в меньшей степени, чем менее вероятные и, таким образом, добавляют меньше битов к результату.
Перед началом работы соответствующий текста интервал является [0, 1). При обработке следующего символа его ширина сужается за счет выделения этому символу части интервала. Например, применим к тексту "еаии!" Алфавита {а, е, и, о, u,! } Модель с постоянными вероятностями, заданными в таблице 1.
Таблица. Пример постоянной модели для алфавита {а, е, и, о, u,! }.
Символ Вероятность Интервал
А 0,2 [0,0; 0,2)
Е 0,3 [0,2, 0,5)
И 0,1 [0,5; 0,6)
О 0,2 [0,6; 0,8)
U 0,1 [0,8; 0,9)
! 0,1 [0,9, 1,0)
И кодировщику, и декодировщику известно, что в самом начале интервал является [0, 1). После просмотра первого символа "е", кодировщик сужает интервал до [0,2, 0,5), который выделяет модель символа. Второй символ "а" сузит этот новый интервал до первой его пятой часть, поскольку для "а" выделено фиксированный интервал [0,0; 0,2). В результате получим рабочий интервал [0,2; 0,26), потому что предыдущий интервал имел ширину в 0,3 единицы и одна пятая от него есть 0,06. Следующему символу "и" соответствует фиксированный интервал [0,5; 0,6), что применимо к рабочему интервалу [0,2; 0,26) сужает его до интервала [0,23; 0,236). Продолжая таким же образом имеем:
В начале [0.0; 1.0)
После просмотра "e" [0.2; 0.5)
После просмотра "а" [0.2; 0.26)
После просмотра "и" [0.23; 0.236)
После просмотра "o" [0.233; 0.2336)
После просмотра "u" [0.23354; 0.2336)
Предположим, что все, что декодировщик знает о тексте, это конечный интервал [0.23354; 0,2336). Он сразу поймет, что первый закодированный символ - это "е", так как итоговый интервал целиком лежит в интервале, который был выделен этому символу согласно Таблице 1. Теперь повторим действия кодировщика:
Сначала [0.0; 1.0)
После просмотра "e" [0.2; 0.5)
Отсюда понятно, что второй символ - это "а", поскольку это приведет к интервалу [0,2; 0,26), который вполне включает в себя итоговый интервал [0.23354; 0,2336). Работая таким образом, декодировщик вытягивает весь текст.
декодировщику не нуждается знать значения обоих границ итогового интервала, полученного от кодировщика. Даже одного значения, лежащего внутри него, например, 0,23355 уже достаточно. (Другие числа - 0.23354, 0,23357 и даже 0,23354321 - вполне пригодны). Однако, чтобы завершить процесс, декодировщику нужно своевременно распознать конец текста. Кроме того, одно и то же число 0,0 можно представить и как "а", и как "аа", и как "ааа" и т. д. Для устранения недоразумения мы должны обозначать завершения каждого текста специальным символом EOF, известным и кодировщике и декодировщику. Для алфавита из таблицы 1 с этой целью, и только с ней, будет использоваться символ "!". Когда декодировщик встречает этот символ, то он завершает свой процесс.
Для фиксированной модели, которая задается моделью таблицы 1, энтропия 5-ти символьного текста "еаио!" будет-log 0,3 - log 0,2 - log 0,1 - log 0,1 - log 0,1 = - log 0,00006 4,22. (Здесь применяем логарифму с основанием 10, потому вышеприведенное кодирования выполнялось для десятичных чисел). Это объясняет, почему нужно 5 десятичных цифр для кодирования этого текста. Таким образом, ширина итогового интервала является 0,2336 - 0, 23354 = 0,00006, а энтропия - отрицательный десятичный логарифм этого числа. Обычно мы работаем с двоичной арифметикой, передаем двоичные числа и измеряем энтропию в битах.
Пяти десятичных цифр кажется много для кодирования текста из четырех гласных! Видимо не совсем удачно заканчивать пример развертыванием, а не сжатием. Однако понятно, что
разные модели дают разную энтропию. Лучшая модель, построенная на анализе отдельных символов текста "еаио!", Является такое множество частот символов: {"е" (0,2), "а" (0,2), "и" (0,4), "! "(0,2)}. Она дает энтропию, равную 2,89 в десятичной системе счисления, то есть кодирует исходный текст числом из трех цифр. Однако, более сложные модели, как отмечалось ранее, дают в общем случае гораздо лучший результатПосмотреть предложения по расчету стоимости
Заказчик
заплатил
заплатил
500 ₽
Заказчик не использовал рассрочку
Гарантия сервиса
Автор24
Автор24
20 дней
Заказчик принял работу без использования гарантии
15 января 2016
Заказ завершен, заказчик получил финальный файл с работой
5
Создать программу архиватор.docx
2016-01-18 21:48
Последний отзыв студента о бирже Автор24
Общая оценка
4
Положительно
Не смотря на переменчивый нрав преподавателя, автор справился со всеми поставленными задачами и пожеланиями на высоком уровне.