Алгоритмы сжатия данных

Заказать уникальную курсовую работу
Тип работы: Курсовая работа
Предмет: Информатика
  • 36 36 страниц
  • 22 + 22 источника
  • Добавлена 22.04.2013
1 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
Оглавление

Введение
1. Сжатие данных
1.1. Основные понятия и определения
1.2. Классификация методов сжатия
2. Алгоритмы сжатия данных без потерь
2.1. Вероятностные методы сжатия
2.1.1. По алгоритму Хаффмана
2.1.2. По алгоритму Шеннона-Фано
2.2. Арифметические методы
2.3. Адаптивный алгоритм сжатия
2.4. Сжатие данных с использованием преобразования Барроуза-Вилер
2.5. Алгоритм Зива-Лемпеля
3. Алгоритмы сжатия данных с потерями
3.1. Алгоритм JPEG
3.2. Рекурсивный (волновой) алгоритм
4. Практическая часть
Заключение
Список литературы

Фрагмент для ознакомления

Стандартизован JPEG в 1991 году. Но уже тогда существовали алгоритмы, сжимающие сильнее при меньших потерях качества. Дело в том, что действия разработчиков стандарта были ограничены мощностью существовавшей на тот момент техники [19].3.2. Рекурсивный (волновой) алгоритмРекурсивный алгоритм сжатия называется на английском языке wavelet, то есть волновое сжатие или сжатие с использованием всплесков. Этот вид архивации основан на использовании идеи когерентности областей. Ориентирован алгоритм на цветные и черно-белые изображения с плавными переходами. Он идеально подходит для изображений типа рентгеновских снимков. Коэффициент сжатия задается и варьируется в пределах 5-100. При попытке задать больший коэффициент на резких границах, особенно проходящих по диагонали, проявляется "лестничный эффект" – ступеньки разной яркости размером в несколько пикселей.Идея алгоритма заключается в том, что сохраняется в файл разница – число между средними значениями соседних блоков в изображении, которая обычно принимает значения, близкие к 0.Достоинствами данного алгоритма является легкость реализации возможности постепенного "проявления" изображения при передаче изображения по сети. Кроме того, поскольку в начале изображения фактически хранится его уменьшенная копия, упрощается показ "огрубленного" изображения по заголовку [20].4.Практическая частьВ практической части работы разработана программа, реализующая алгоритм Хаффмана.Для разработки программы использован язык Delphi 7[21, 22, 23].На рисунке 4.1. показано окно разработанной программы.Рисунок 4.1. Программа, реализующие алгоритм кодирование ХаффманаПрограмма работает следующим образом:1. Пользователь вводит в окно "Текст сообщение", информацию, которую необходимо закодировать по алгоритму Хаффмана.2. Пользователь нажимаете на кнопку "кодировать"3. В окно "закодированное сообщение" выводится код полученый по алгоритму Хаффмана (рисунок 4.2).Рисунок 4.2. Работа программыДля декодирования сообщения, отображаемого в окне "закодированное сообщение" необходимо нажать на кнопку "Декодировать" и в окно "декодированное сообщение" будет выведен результат (рисунок 4.3).Рисунок 4.3. Работа программыПервый модуль содержит две процедуры обработки нажатия кнопок "Кодирование" и "Декодирование" (листинг 1). Листинг 1unithufftest;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Huffman, StdCtrls;type TForm1 = class(TForm) Memo1: TMemo; Memo2: TMemo; Memo3: TMemo; Button1: TButton; Button2: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject);private { Private declarations } public { Public declarations } end;var Form1: TForm1; huffTree: PhtTree; huffTable: PhlTable;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin huffTree:= BuildTree(PAnsiChar(Memo1.Text)); huffTable:= BuildTable(huffTree); Memo2.Clear; Memo2.Text:= Encode(huffTable, Memo1.Text);end;procedure TForm1.Button2Click(Sender: TObject);begin Memo3.Clear; Memo3.Text:= Decode(huffTree, Memo2.Text);end;end.Основной модуль приведен на листинге 2.Листинг 2unit Huffman;interfaceusesWindows, Queue;typePhtNode = ^htNode;htNode = recordsymbol: AnsiChar;left: PhtNode;right: PhtNode;end;PhtTree = ^htTree;htTree = recordroot: PhtNode;end;PhlNode = ^ hlNode;hlNode = recordsymbol: AnsiChar;code: PAnsiChar;next: PhlNode;end;PhlTable = ^hlTable;hlTable = recordfirst: PhlNode;last: PhlNode;end;function BuildTable(huffmanTree: PhtTree): PhlTable;function BuildTree(InputStr: PAnsiChar): PhtTree;function Encode(hTable: PhlTable; EncodeString: String): String;function Decode(hTree: PhtTree; DecodeString: String): String;implementationfunction StrLCopy(Dest: PChar; const Source: PChar; MaxLen: Cardinal): PChar; assembler;asm PUSH EDI PUSH ESI PUSH EBX MOV ESI,EAX MOV EDI,EDX MOV EBX,ECX XOR AL,AL TEST ECX,ECX JZ @@1 REPNE SCASB JNE @@1 INC ECX@@1: SUB EBX,ECX MOV EDI,ESI MOV ESI,EDX MOV EDX,EDI MOV ECX,EBX SHR ECX,2 REP MOVSD MOV ECX,EBX AND ECX,3 REP MOVSB STOSB MOV EAX,EDX POP EBX POP ESI POP EDIend;procedure TraverseTree(treeNode: PhtNode; Table: PhlTable; k: Integer; Code: PAnsiChar); {обработка ветвей полученного дерева}var l: Integer;aux: PhlNode;beginif (treeNode^.Left= nil) and (treeNode^.Right = nil) then begincode[k]:= #0; l:= Length(code);GetMem(aux, SizeOf(hlNode)); if l<>0 then begin GetMem(aux^.code, Length(code)); StrLCopy(aux^.code, code, Length(code)); end else begin GetMem(aux^.code, 1); aux^.code:= '0'; end;aux.symbol:= treeNode.symbol;aux.next:= nil;if (table^.first = nil) then begintable^.first:= aux;table^.last:= aux;end else begintable^.last^.next:= aux;table^.last:= aux;end;end;if (treeNode^.left <> nil) then begincode[k]:= '0';TraverseTree(treenode^.left, table, k+1, code);end;if (treeNode^.right <> nil) then begincode[k]:= '1';TraverseTree(treeNode^.right, table, k+1, code);end;end;function BuildTable(huffmanTree: PhtTree): PhlTable; {процедура построения таблицы кодирования}varcode: array [0..255] of Char;k: Integer;beginGetMem(Result, SizeOf(hlTable));Result^.first:= nil;Result^.last:= nil;FillChar(code[0], 256, 0);k:= 0;TraverseTree(huffmanTree^.root, Result, k, code);end;function BuildTree(InputStr: PAnsiChar): PhtTree; {процедура построения дерева}varproability: array [0..255] of Longint;i, priority: Integer;huffmanQueue: PQueue;aux, left, right, newNode: PhtNode;beginfor i:= 0 to 255 doproability[i]:= 0;for i:= 0 to Length(InputStr)-1 doInc(proability[Byte(InputStr[i])]);InitPQueue(huffmanQueue);for i:=0 to 255 do beginif proability[i]<>0 then beginGetMem(aux, SizeOf(htNode));aux^.left:= nil;aux^.right:= nil;aux.symbol:= Char(i);AddPQueue(huffmanQueue, aux, proability[i]);end;end;while (huffmanQueue^.size <> 1) do beginpriority:= huffmanQueue^.first^.priority+huffmanQueue^.first^.next^.priority;left:= GetPQueue(huffmanQueue);right:= GetPQueue(huffmanQueue); GetMem(newNode, SizeOf(htNode));newNode^.left:= left;newNode^.right:= right;AddPQueue(huffmanQueue, newNode, priority);end;GetMem(Result, SizeOf(htTree));Result^.root:= getPQueue(huffmanQueue);end;function Encode(hTable: PhlTable; EncodeString: String): String; {процедура кодирования}var i, l: Integer; trv: PhlNode;beginResult:= ''; l:= Length(EncodeString); i:= 1; repeat trv:= hTable^.first; while trv^.symbol<>EncodeString[i] do trv:= trv^.next; Result:= Result+trv^.code+' '; Inc(i); until i>l;end;function Decode(hTree: PhtTree; DecodeString: String): String; {процедура декодирования}var i, l: Integer; trv: PhtNode;begin trv:= hTree^.root; i:= 1; l:= Length(DecodeString); repeat if (DecodeString[i]=' ') then begin inc(i); Continue; end; if (trv^.left=nil)and (trv^.right=nil) then begin Result:= Result+trv^.symbol; trv:= hTree^.root; end; if (DecodeString[i]='0')and(trv^.left <> nil) then trv:= trv^.left; if (DecodeString[i]='1')and(trv^.right <> nil) then trv:= trv^.right; Inc(i); until i>l; if (trv^.left=nil)and (trv^.right=nil) then Result:= Result+trv^.symbol;end;end. ЗаключениеСжатием данных (data compression) называется алгоритм эффективного кодирования информации, при этом она должна занять объем памяти меньше, чем у исходного сообщения. Таким образом, происходит избавление от избыточности (redundancy), т.е. удаляются из физического представления данных биты, которые не несут смысловой нагрузки и в действительности не требуются, при этом остается такое кол только количество битов, которое обязательно для представления информации в соответствии со значением энтропии.В работе рассмотрено понятие сжатия данных, постоянна классификация алгоритмов сжатия данных. Все алгоритмы разделены на две большие группы с не искажающие (без потерь) и искажающие с потерями. Подробно рассмотрены наиболее распространенные алгоритмы сжатия информации из каждой группы. В практической части разработана программа кодирования информации по алгоритму Хаффмана. Для разработки программы использован язык Delphi 7Список литературыЮ.А.Семенов, Алгоритмы телекоммуникационных сетей Бином. Интернет университет Информационных технологий, Москва, 2007, (трехтомник ~1900 стр)Фундаментальные алгоритмы и структуры данных в Delphihttp://www.delphiplus.org/fundamentalnie-algoritmy-i-struktury-dannih/szhatie-dannih.htmlС.В.Яблонский “Введение в дискретную математику”. // М. “Наука”, 1986. Раздел “Теория кодирования”Д.С.Ватолин “Сжатие статических изображений” // Открытые системы сегодня. Номер 8 (29) Апрель 1995Д. Ватолин, А. Ратушняк, М. Смирнов, В. Юкин. Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео. — Диалог-МИФИ, 2002. — С. 384. — ISBN 5-86404-170-X 3000 экз.Артюшенко В. М., Шелухин О. И., Афонин М. Ю. Цифровое сжатие видеоинформации и звука. Издательство: Дашков и Ко, 2004. - 426 с.Алгоритмы архивации данных http://www.structur.h1.ru/arch.htmИнформатика. Базовый курс. / Под ред. С.В.Симоновича. - СПб., 2000 г.Т.О. Сундукова, Г.В. Ваныкина Структуры и алгоритмы компьютерной обработки данных http://www.intuit.ru/department/algorithms/staldata/41/2.html Метод Xаффмана и родственные методы http://mindspring.narod.ru/alg/huffman.htmlД. Сэломон. Сжатие данных, изображения и звука. — М.: Техносфера, 2004. — С. 368. — ISBN 5-94836-027-X 3000 экзС. Зелинский В цифровых тискахhttp://bessarab.ucoz.ru/publ/fizikam/szhatie_dannykh/2-1-0-6А. М. Яглом, И. М. Яглом. Вероятность и информация. — М.: «Наука», 1973.Семёнов Ю.А. Локально адаптивный алгоритм сжатия book.itep.ruРабота со сжатыми данными http://ndo.sibsutis.ru/bakalavr/sem2/course85/lec7_1.htmСеменов Ю.А. Сжатие данных с использованием преобразования Барроуза-Вилера http://book.itep.ru/2/26/burv_263.htmСжатие с потерями http://mf.grsu.by/UchProc/livak/po/comprsite/theory_image_01.htmlА.С.Климов “Форматы графических файлов” // НИПФ “ДиаСофт Лтд”, 1995.В.Ю.Романов “Популярные форматы файлов для хранения графических изображений на IBM PC” // Москва “Унитех”, 1992Д.С.Ватолин. Алгоритмы cжатия изображений. - М.:Издательский отдел факультета Вычислительной Математики и Кибернетики МГУ им. М.В.Ломоносова, 1999 г. — 76 с.Фаронов В.В. Системы программирования Delphi. – СПб.:БХВ-Петербург, 2005. – 912 с.Культин Н.Б. Программирование на ObjectPascal. – СПб.:БХВ-Петербург, 2002. – 528 с.

Список литературы
1.Ю.А.Семенов, Алгоритмы телекоммуникационных сетей Бином. Интернет университет Информационных технологий, Москва, 2007, (трех-томник ~1900 стр)
2.Фундаментальные алгоритмы и структуры данных в Delphi http://www.delphiplus.org/fundamentalnie-algoritmy-i-struktury-dannih/szhatie-dannih.html
3.С.В.Яблонский “Введение в дискретную математику”. // М. “Наука”, 1986. Раздел “Теория кодирования”
4.Д.С.Ватолин “Сжатие статических изображений” // Открытые си-стемы сегодня. Номер 8 (29) Апрель 1995
5.Д. Ватолин, А. Ратушняк, М. Смирнов, В. Юкин. Методы сжатия данных. Устройство архиваторов, сжатие изображений и видео. — Диалог-МИФИ, 2002. — С. 384. — ISBN 5-86404-170-X 3000 экз.
6.Артюшенко В. М., Шелухин О. И., Афонин М. Ю. Цифровое сжа-тие видеоинформации и звука. Издательство: Дашков и Ко, 2004. - 426 с.
7.Алгоритмы архивации данных http://www.structur.h1.ru/arch.htm
8.Информатика. Базовый курс. / Под ред. С.В.Симоновича. - СПб., 2000 г.
9.Т.О. Сундукова, Г.В. Ваныкина Структуры и алгоритмы компью-терной обработки данных http://www.intuit.ru/department/algorithms/staldata/41/2.html
10.Метод Xаффмана и родственные методы http://mindspring.narod.ru/alg/huffman.html
11.Д. Сэломон. Сжатие данных, изображения и звука. — М.: Техно-сфера, 2004. — С. 368. — ISBN 5-94836-027-X 3000 экз
12.С. Зелинский В цифровых тисках http://bessarab.ucoz.ru/publ/fizikam/szhatie_dannykh/2-1-0-6
13.А. М. Яглом, И. М. Яглом. Вероятность и информация. — М.: «Наука», 1973.
14.Семёнов Ю.А. Локально адаптивный алгоритм сжатия book.itep.ru
15.Работа со сжатыми данными http://ndo.sibsutis.ru/bakalavr/sem2/course85/lec7_1.htm
16.Семенов Ю.А. Сжатие данных с использованием преобразования Барроуза-Вилера http://book.itep.ru/2/26/burv_263.htm
17.Сжатие с потерями http://mf.grsu.by/UchProc/livak/po/comprsite/theory_image_01.html
18.А.С.Климов “Форматы графических файлов” // НИПФ “ДиаСофт Лтд”, 1995.
19.В.Ю.Романов “Популярные форматы файлов для хранения графических изображений на IBM PC” // Москва “Унитех”, 1992
20.Д.С.Ватолин. Алгоритмы cжатия изображений. - М.: Издательский отдел факультета Вычислительной Математики и Кибернетики МГУ им. М.В.Ломоносова, 1999 г. — 76 с.
21.Фаронов В.В. Системы программирования Delphi. – СПб.:БХВ-Петербург, 2005. – 912 с.
22.Культин Н.Б. Программирование на Object Pascal. – СПб.:БХВ-Петербург, 2002. – 528 с.

Вопрос-ответ:

Какие существуют методы сжатия данных?

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

Что такое вероятностные методы сжатия?

Вероятностные методы сжатия основаны на анализе вероятностной структуры данных и замене наиболее вероятных символов более короткими кодами, а менее вероятных символов - более длинными кодами.

Как работает алгоритм Хаффмана?

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

Как работает алгоритм JPEG?

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

Что такое алгоритм Зива-Лемпеля?

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

Что такое сжатие данных?

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

Какие методы сжатия данных бывают?

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

Как работает алгоритм Хаффмана?

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

Как работает алгоритм JPEG?

Алгоритм JPEG - это метод сжатия данных с потерями, который применяется для сжатия изображений. Он использует дискретное косинусное преобразование (DCT) для представления изображения в частотной области, а затем применяет квантование и алгоритм Хаффмана для дальнейшего сжатия.

Что такое алгоритм Зива-Лемпеля?

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

Что такое сжатие данных?

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

Какие методы сжатия данных существуют?

Существует несколько методов сжатия данных, включая вероятностные методы (как алгоритм Хаффмана и алгоритм Шеннона-Фано), арифметические методы, адаптивные методы сжатия, методы с использованием преобразования Барроуза-Вилера и алгоритм Зива-Лемпеля. Также существуют методы сжатия данных с потерями, такие как алгоритм JPEG и рекурсивный (волновой) алгоритм.