1. РОССИЙСКАЯ АКАДЕМИЯ НАРОДНОГО ХОЗЯЙСТВА И
ГОСУДАРСТВЕННОЙ СЛУЖБЫ ПРИ ПРЕЗИДЕНТЕ
РОССИЙСКОЙ ФЕДЕРАЦИИ
Нижегородский институт управления
Кафедра информатики и информационных технологий
Введение в алгоритмы и
структуры данных
Ивина Наталья Львовна
доцент кафедры Информатики и ИТ
2. Тема 5. Алгоритмы сжатия данных
Основные понятия и теоремы алфавитного и блочного
кодирования.
Теоретические основы сжатия данных. Алгоритмы обратимых
методов: Алгоритм RLE, Алгоритм KWE, Алгоритм Хаффмана,
Синтетические алгоритмы.
Программные средства сжатия данных и уплотнения носителей
3. Введение. Основные понятия
теории кодирования
Теория кодирования - это раздел теории информации, изучающий
способы отождествление сообщений с отображающими их сигналами.
Код - набор знаков вторичного алфавита, используемый для
представления знаков или их сочетаний первичного алфавита.
Кодирование - перевод информации, представленной сообщением в
первичном алфавите, в последовательность кодов.
Декодирование - операция, обратная кодированию, т.е. восстановление
информации в первичном алфавите по полученной последовательности
кодов.
Операции кодирования и декодирования называются обратимыми, если
их последовательное применение обеспечивает возврат к исходной
информации без каких-либо ее потерь.
Код называется равномерным или блочным, если все кодовые слова
имеют одинаковую длину.
4. Основные понятия теории
Кодирование применяется для решения задач:
• представление данных произвольной природы (например, чисел,
текста, графики) в памяти компьютера;
• защита информации от несанкционированного доступа;
• обеспечение помехоустойчивости при передаче данных по каналам
связи;
• сжатие информации в базах данных.
Источник
сообщений
Схема
кодировани
я
Схема
... декодирова-
Адресат
ния
кодирования
5. Алфавитное кодирование
Пусть заданы два алфавита А и В, состоящие из конечного числа
символов: A = {a1, a2, …, an} и B = {b1, b2, …, bm}.
Элементы алфавита называются буквами. Упорядоченный набор в
алфавите А называется словом: а = a1, a2, …, an .
Для слова а буква a1, называется началом, или префиксом, слова, а
буква an - окончанием, или постфиксом, слова.
Слова можно соединять. Для этого префикс второго слова должен
следовать сразу за постфиксом первого, при этом в новом слове они
утрачивают свой статус, если только одно из слов не было пустым.
6. Алфавитное кодирование
Множество всех непустых слов алфавита A будем обозначать символом
A*.
Множество слов, составленных в алфавите B, обозначим B*.
Множество A часто называют алфавитом сообщений, множество В –
кодирующим алфавитом.
Обозначим через F отображение слов алфавита А в алфавит В.
Тогда слово b = F(a) назовем кодом слова а.
Декодирование можно рассматривать как функцию F-1 – обратную
функции F – кодированию.
7. Алфавитное кодирование.
Неравномерное кодирование
Знаки первичного алфавита кодируются комбинациями символов
двоичного алфавита: 0 и 1. Длина кодов и, соответственно,
длительность передачи отдельного кода, могут различаться.
Длительности элементарных сигналов при этом одинаковые.
Для передачи информации, в среднем приходящейся на знак
первичного алфавита, необходимо время.
Задача по оптимизации неравномерного кодирования заключается в
построении схемы кодирования, в которой суммарная длительность
кодов при передаче (или суммарное число кодов при хранении)
данного сообщения была бы наименьшей.
8. Алфавитное кодирование.
Неравномерное кодирование
Суммарная длительность сообщения будет меньше, если знакам
первичного алфавита, которые встречаются в сообщении чаще,
присвоить меньшие по длине коды, а тем, относительная частота
которых меньше – коды более длинные.
Параллельно должна решаться проблема различимости кодов.
Представим, что на выходе кодера получена следующая
последовательность элементарных сигналов:
00100010000111010101110000110
9. Алфавитное кодирование.
Неравномерное кодирование
1. Использование специальной комбинации элементарных сигналов,
которая интерпретируется декодером как разделитель знаков. Его
называют “Неравномерный код с разделителем”.
Разделителем отдельных кодов букв может быть
последовательность 00 (признак конца знака), а разделителем слов
– 000 (признак конца слова – пробел). При этом можно установить
правила построения кодов, например:
~ код признака конца знака может быть включен в код буквы,
поскольку не существует отдельно (т.е. кода всех букв будут
заканчиваться 00);
~ коды букв не должны содержать двух и более нулей подряд в
середине (иначе они будут восприниматься как конец знака);
~ разделителю слов (000) всегда предшествует признак конца
знака и др.
10. Алфавитное кодирование.
Неравномерное кодирование
2. Применение префиксных кодов («приставка»). При прочтении
(расшифровке) закодированного сообщения путем сопоставления с
таблицей кодов всегда можно точно указать, где заканчивается один код и
начинается другой.
Таблица префиксных кодов некоторых
русских букв
а л м р у ы
10 010 00 11 0110 0111
Декодируем сообщение, в котором отсутствуют коды конца знака и слова:
00100010000111010101110000110.
11. Алфавитное кодирование.
Равномерное кодирование.
Байтовый код
Двоичный код первичного алфавита строится цепочками равной
длины. Формировать признак конца знака не требуется. Приемное
устройство отсчитывает оговоренное заранее количество
элементарных сигналов и интерпретирует цепочку, соотнося ее с
таблицей кодов.
Применение равномерного кода оказывается одним из средств
контроля правильности передачи, поскольку факт поступления
лишнего элементарного сигнала или, наоборот, поступление
неполного кода сразу интерпретируется как ошибка.
12. Алфавитное кодирование.
Равномерное кодирование.
Байтовый код
Число знаков (сигналов) равномерного кода определяется по
формуле:
k ≥ Log2 N,
где k-число сигналов, N – число символов в алфавите.
Примером равномерного алфавитного кодирования является
телеграфный код Бодо, пришедший на смену азбуке Морзе.
Исходный алфавит должен содержать не более 32-х символов.
k= Log2 32 = 5.
Каждый знак первичного алфавита содержит 5 бит информации и
кодируется цепочкой из 5 двоичных знаков.
В русском алфавите 34 буквы (с пробелом). Поэтому пришлось
объединить в один знак буквы е – ё, ь – ъ. После такого сжатия N =
32. Знаки препинания, либо отсутствуют, либо заменяются
буквенными аббревиатурами; такими как “ТЧК”, ЗПТ” и др.
13. Алфавитное кодирование.
Равномерное кодирование.
Байтовый код
Равномерное алфавитное кодирование используется при
представлении символьной (знаковой) информации в компьютере.
Чтобы определить длину кода, необходимо начать с установления
количество знаков в первичном алфавите. Компьютерный алфавит
должен включать:
1. Прописные и строчные буквы латинского алфавита, всего 26 х 2 =
52шт.
2. Прописные и строчные буквы русского алфавита:33 х 2 = 66шт.
3. Цифры от 0 до 9 – всего 10шт.
4. Знаки математических операций, знаки препинания, специальные
символы, всего 20шт.
Общее число символов N= 148.
Длина кодовой цепочки: k > Log2148 > 7,21. Длина кода выражается
целым числом, поэтому берется k = 8.
14. Стандартизации
кодовых таблиц
Первым таким международным стандартом, который применялся на
больших вычислительных машинах, был EBCDIC (Extended Binary
Coded Decimal Interchange Code) – расширенная двоичная кодировка
десятичного кода обмена.
В персональных компьютерах и телекоммуникационных системах
применяется международный байтовый код ASCII (American
Standard Code for Information Interchange – стандартный
американский код обмена информацией).
Регламентирует коды первой половины кодовой таблицы (номера
кодов от 0 до 127): прописные и строчные английские буквы, цифры,
знаки препинания и математических операций, управляющие коды.
Вторая часть кодовой таблицы охватывает коды в интервале от 128
до 255, используется для представления символов национальных
алфавитов и символов псевдографики.
15. Алфавитное кодирование с
неравной длительностью
элементарных сигналов. Код Морзе
Свой код Морзе разработал в 1838 г.
Каждой букве или цифре сопоставляется некоторая
последовательность кратковременных импульсов – точек и тире,
разделяемых паузами.
Пусть t- длительность импульса соответствует точке, тогда:
3t – соответствует тире
3t – пауза между буквами
t - длительность паузы между точками, точкой и тире, между тире
6t – длительность пазы между словами и т.д.
16. Блочное двоичное кодирование
Кодовый знак относится к нескольким буквам первичного
алфавита или к целому слову первичного языка. Такая
комбинация называется блоком. Кодирование блоков понижает
избыточность.
Пусть имеется словарь некоторого языка, содержащий
n = 16000 слов. Поставим в соответствие каждому слову
равномерный двоичный код. Длину кода находим по формуле :
k ≥ Log21600 > 13,97 = 14.
Следовательно, каждое слово кодируется комбинацией из 14
нулей и единиц.
17. Блочное двоичное кодирование
В качестве примера закодируем несколько слов:
ИНФОРМАТИКА - 10101011100110,
НАУКА - 00000000000001,
ИНТЕРЕСНАЯ - 00100000000010;
Тогда последовательность:
10101011100110 00100000000010 00000000000001
будет означать «ИНФОРМАТИКА ИНТЕРЕСНАЯ НАУКА».
Установлено, что средняя длина русского слова равна 5,3 буквам, а
с учетом пробела между словами, она станет равной К=6,3 буквам.
Таким образом, кодирование слов оказывается более выгодным, чем
алфавитное.
Вместо слов можно кодировать сочетания букв – блоки.
18. Теоретические основы сжатия
данных. Алгоритмы сжатия
данных.
Цель процесса сжатия - получение более компактного выходного
потока информационных единиц из некоторого изначально
некомпактного входного потока при помощи некоторого их
преобразования.
Характерной особенностью большинства типов данных является их
избыточность. Определяется:
•типом данных;
•принятой системой кодирования.
Постоянно возникает проблема уменьшения избыточности или
сжатия данных. Если методы сжатия данных применяются к готовым
файлам, то часто вместо термина "сжатие данных" употребляют
термин "архивация данных", сжатый вариант данных называют
архивом, а программные средства, которые реализуют методы
сжатия называются архиваторами.
19. Три теоретических способа уменьшения избыточности данных:
1. изменение содержимого данных,
2. изменение структуры данных,
3. одновременное изменение как структуры, так и содержимого
данных.
Теоретические основы сжатия
данных. Алгоритмы сжатия
данных.
20. Теоретические основы сжатия
данных. Алгоритмы сжатия
данных.
Основными техническими характеристиками процессов сжатия и
результатов их работы являются:
* степень сжатия (compress rating) или отношение (ratio) объемов
исходного и результирующего потоков;
* скорость сжатия - время, затрачиваемое на сжатие некоторого
объема информации входного потока, до получения из него
эквивалентного выходного потока;
* качество сжатия - величина, показывающая на сколько сильно
упакован выходной поток, при помощи применения к нему
повторного сжатия по этому же или иному алгоритму.
21. Теоретические основы сжатия
данных. Алгоритмы сжатия
данных.
Все способы сжатия можно разделить на две категории:
обратимое и необратимое сжатие.
Примерами форматов сжатия с потерями информации могут быть:
•JPEG - для графических данных;
•MPG - для видеоданных;
•MP3 - для аудиоданных.
Примеры форматов сжатия без потери информации:
•GIF, TIFF - для графических данных;
•AVI - для видеоданных;
•ZIP, ARJ, RAR, CAB, LH - для произвольных типов данных.
22. Алгоритмы обратимых методов.
При исследовании методов сжатия данных следует иметь в виду
существование следующих доказанных теорем:
1. Для любой последовательности данных существует теоретиче-
ский предел сжатия, который не может быть превышен без потери
части информации.
2. Для любого алгоритма сжатия можно указать такую
последовательность данных, для которой он обеспечит лучшую
степень сжатия, чем другие методы.
3. Для любого алгоритма сжатия можно указать такую
последовательность данных, для которой данный алгоритм
вообще не позволит получить сжатия.
23. Алгоритмы обратимых методов.
Алгоритм Выходная
структура
Сфера
применения Примечание
RLE (Run-
Length
Encoding)
Список
(вектор
данных)
Графические
данные
Эффективность
алгоритма не зависит
от объема данных
KWE
(Keyword
Encoding)
Таблица
данных
(словарь)
Текстовые
данные
Эффективен для
массивов большого
объема
Алгоритм
Хафмана
Иерархичес-
кая структура
(дерево
кодировки)
Любые
данные
Эффективен для
массивов большого
объема
24. Алгоритмы обратимых методов.
Алгоритм RLE.
Сжатие способом кодирования серий.
В основу алгоритмов RLE положен принцип выявления
повторяющихся последовательностей данных и замены их
простой структурой, в которой указывается код данных и
коэффициент повтора.
Последовательность из n одинаковых символов k заменяется
парой символов nk.
Строка “aaaaarooow”,
после кодирования по алгоритму RLE сжатая строка “5ar3ow”.
Кодированная строка на 4 символа меньше.
25. Алгоритмы обратимых методов.
Алгоритм RLE.
Например, для последовательности:
0; 0; 0; 127; 127; 0; 255; 255; 255; 255 (всего 10 байтов)
образуется следующий вектор, который при записи в строку имеет
вид:
3;0; 2; 127; 1; 0; 4; 255 (всего 8 байтов).
В данном примере коэффициент сжатия равен 8/10 (80 %).
Другой пример :
44 44 44 11 11 11 11 11 01 03 FF 22 22 - исходная
последовательность
03 44 04 11 00 03 01 03 FF 02 22 - сжатая последовательность
26. Алгоритмы обратимых методов.
Алгоритм RLE.
Данный метод достаточно эффективен для сжатия растровых
графических изображений (BMP, PCX, TIF, GIF), т.к. они содержат
достаточно много длинных серий повторяющихся
последовательностей байтов.
Программные реализации алгоритмов RLE отличаются простотой,
высокой скоростью работы, но в среднем обеспечивают
недостаточное сжатие. Для текстовых данных методы RLE, как
правило, неэффективны.
Недостатком метода RLE является достаточно низкая степень
сжатия.
27. Алгоритмы обратимых методов.
Алгоритм RLE. Первый вариант
алгоритма
В данном алгоритме признаком счетчика служат единицы в двух
верхних битах считанного файла:
Соответственно оставшиеся 6 бит расходуются на счетчик, который может
принимать значения от 1 до 64. Строку из 64 повторяющихся байтов мы
превращаем в два байта, т.е. сожмем в 32 раза.
28. Алгоритмы обратимых методов.
Алгоритм RLE. Второй вариант
алгоритма
Второй вариант этого алгоритма имеет больший максимальный
коэффициент архивации и меньше увеличивает в размерах
исходный файл.
Признаком повтора в данном алгоритме является единица в
старшем разряде соответствующего байта:
Как можно легко подсчитать, в лучшем случае этот алгоритм сжимает
файл в 64 раза (а не в 32 раза, как в предыдущем варианте), в худшем
увеличивает на 1/128.
29. Алгоритмы обратимых методов.
Алгоритм RLE. Характеристики
алгоритма
• Коэффициенты компрессии (Лучший, средний, худший
коэффициенты): Первый вариант: 32; 2; 0,5. Второй вариант:
64; 3; 128/129.
• Класс изображений: Ориентирован алгоритм на изображения
с небольшим количеством цветов: деловую и научную графику.
• Характерные особенности: К положительным сторонам
алгоритма, пожалуй, можно отнести только то, что он не
требует дополнительной памяти при архивации и
разархивации, а также быстро работает.
30. Алгоритмы обратимых методов.
Алгоритм KWE.
В основу алгоритмов кодирования по ключевым словам (Keyword
Encoding) положено кодирование лексических единиц исходного
документа группами байтов фиксированной длины.
Примером лексической единицы может служить слово.
Результат кодирования сводится в таблицу, которая прикладывается
к Результирующему коду и представляет собой словарь.
Обычно для англоязычных текстов принято использовать
двухбайтную кодировку слов. Образующиеся при этом пары байтов
называют токенами.
31. Алгоритмы обратимых методов.
Алгоритм KWE.
Для русскоязычных документов, отличающихся увеличенной
длиной слов и большим количеством приставок, суффиксов и
окончаний, не всегда удается ограничиться двухбайтными
токенами, и эффективность метода заметно снижается.
Эффективность метода существенно зависит от длины документа,
поскольку из-за необходимости прикладывать к архиву словарь
длина кратких документов не только не уменьшается, но даже
возрастает.
32. Алгоритмы обратимых методов.
Алгоритм KWE.
Существует довольно много реализаций этого алгоритма, среди
которых наиболее распространенными являются алгоритм Лемпеля-
Зива (алгоритм LZ) и его модификация - алгоритм Лемпеля-Зива-
Велча (алгоритм LZW).
Словарем в данном алгоритме является потенциально бесконечный
список фраз.
Новая фраза, состоящая из индекса совпадения и следующего за ним
символа, прибавляется в словарь.
33. Алгоритмы обратимых методов.
Алгоритм KWE. Алгоритм LZ
Название получил по инициалам двух исследователей - Абрахама
Лемпэла (Abraham Lempel) и Якоба Зива (Jacob Ziv), разработавших в
1970 году алгоритм.
Суть метода:
упаковщик постоянно хранит некоторое количество последних
обработанных символов в буфере. По мере обработки входного потока
вновь поступившие символы попадают в конец буфера, сдвигая
предшествующие символы и вытесняя самые старые.
Затем, после построения хеш таблиц алгоритм выделяет самую
длинную начальную подстроку входного потока, совпадающую с одной
из подстрок в словаре, и выдает на выход пару (length, distance), где
length - длина найденной в словаре подстроки, а distance - расстояние
от нее до входной подстроки (то есть фактически индекс подстроки в
буфере, вычтенный из его размера).
34. Алгоритмы обратимых методов.
Алгоритм KWE. Алгоритм LZ
Увеличение размера файла в худшем случае на 32770/32768 (в двух
байтах записано, что нужно переписать в выходной поток следующие
215 байт), что совсем неплохо. Максимальный коэффициент сжатия
составит в пределе 8192 раза. Минимальная подстрока, для которой
выгодно проводить сжатие, должна состоять в общем случае
минимум из 5 байт, что и определяет малую ценность данного
алгоритма.
К достоинствам LZ можно отнести чрезвычайную простоту алгоритма
декомпрессии.
35. Алгоритмы обратимых методов.
Алгоритм KWE. Алгоритм LZW
Опубликован Велчем в 1984 году, в качестве улучшенной
реализации алгоритма LZ. Алгоритм разработан так, чтобы его
можно было быстро реализовать, но он не обязательно
оптимален, поскольку не проводит никакого анализа входных
данных.
В 1987 году алгоритм стал частью стандарта на формат
изображений GIF. В настоящее время, алгоритм содержится в
стандарте PDF.
36. Алгоритмы обратимых методов.
Алгоритм KWE. Алгоритм LZW
Процедура LZW-сжатия:
СТРОКА = очередной символ из входного потока
WHILE входной поток не пуст DO
СИМВОЛ = очередной символ из входного потока
IF СТРОКА+СИМВОЛ в таблице строк THEN
СТРОКА = СТРОКА+СИМВОЛ
ELSE
вывести в выходной поток код для СТРОКА
добавить в таблицу строк СТРОКА+СИМВОЛ
СТРОКА = СИМВОЛ
END of IF
END of WHILE
вывести в выходной поток код для СТРОКА
37. Алгоритмы обратимых методов.
Алгоритм KWE. Алгоритм LZW
Пример:
Входная строка:
/WED/WE/WEE/
WEB/WET
Вход
(символы)
Выход
(коды)
Новые коды и
соответствующие строки
/W / 256 = /W
E W 257 = WE
D E 258 = ED
/ D 259 = D/
WE 256 260 = /WE
/ E 261 = E/
WEE 260 262 = /WEE
/W 261 263 = E/W
EB 257 264 = WEB
/ B 265 = B/
WET 260 266 = /WET
<EOF> T
38. Алгоритмы обратимых методов.
Алгоритм KWE. Алгоритм LZW
Процедура LZW-распаковки:
читать СТАРЫЙ_КОД
вывести СТАРЫЙ_КОД
WHILE входной поток не пуст DO
читать НОВЫЙ_КОД
СТРОКА = перевести НОВЫЙ_КОД
вывести СТРОКУ
СИМВОЛ = первый символ СТРОКИ
добавить в таблицу перевода СТАРЫЙ_КОД+СИМВОЛ
СТАРЫЙ_КОД = НОВЫЙ_КОД
END of WHILE
39. Алгоритмы обратимых методов.
Алгоритм KWE. Алгоритм LZW
Пример:
Входные коды:
/WED256E2602
61257B260T
Вход Старый
код Строка Сим-
вол
Новый вход
таблицы
Новый код Выход
/ / /
W / W W 256 = /W
E W E E 257 = WE
D E D D 258 = ED
256 D /W / 259 = D/
E 256 E E 260 = /WE
260 E /WE / 261 = E/
261 260 E/ E 262 = /WEE
257 261 WE W 263 = E/W
B 257 B B 264 = WEB
260 B /WE / 265 = B/
T 260 T T 266 = /WET
40. Алгоритмы обратимых методов.
Алгоритм KWE. Характеристики
алгоритма LZW
Коэффициенты компрессии (Лучший, средний, худший
коэффициенты): Примерно 1000; 4; 5/7. Сжатие в 1000 раз
достигается только на одноцветных изображениях размером
кратным примерно 7 Мб.
Класс изображений: Ориентирован LZW на 8-битные изображения,
построенные на компьютере. Сжимает за счет одинаковых
подцепочек в потоке.
Характерные особенности: Ситуация, когда алгоритм увеличивает
изображение, встречается крайне редко.
41. Алгоритмы обратимых методов.
Алгоритм Хаффмана.
Разработан в 1952 году аспирантом Массачусетского
технологического института Дэвидом Хаффманом при написании
им курсовой работы.
В основе алгоритма лежит кодирование битовыми группами.
Перед началом кодирования производится частотный анализ кода
документа и выявляется частота повтора каждого из
встречающихся символов.
42. Алгоритмы обратимых методов.
Алгоритм Хаффмана.
Сжимая файл по алгоритму Хаффмана первое что надо сделать - это
прочитать файл полностью и подсчитать сколько раз встречается каждый
символ из расширенного набора ASCII.
Чем чаще встречается тот или иной символ, тем меньшим количеством
битов он кодируется.
После подсчета частоты вхождения каждого символа, необходимо
просмотреть таблицу кодов ASCII и сформировать бинарное дерево.
Образующаяся в результате кодирования иерархическая структура
прикладывается к сжатому документу в качестве таблицы соответствия.
43. Алгоритмы обратимых методов.
Алгоритм Хаффмана.
Пример:
Файл длинной в 100 байт содержит 6 различных символов в себе.
Подсчет вхождений каждого из символов в файл дал следующее:
Эти числа называют частотой вхождения для каждого символа.
44. Алгоритмы обратимых методов.
Алгоритм Хаффмана.
Возьмем из последней таблицы 2 символа с наименьшей частотой
- это D (5) и какой либо символ из F или A (10), можно взять любой
из них, например A.
Сформируем из "узлов" D и A новый "узел", частота вхождения для
которого будет равна сумме частот D и A:
45. Алгоритмы обратимых методов.
Алгоритм Хаффмана.
Теперь снова ищем два символа с самыми низкими частотами
вхождения. Исключая из просмотра D и A и рассматривая вместо
них новый "узел" с суммарной частотой вхождения. Самая низкая
частота теперь у F и нового "узла". Снова сделаем операцию
слияния узлов :
46. Алгоритмы обратимых методов.
Алгоритм Хаффмана.
Рассматриваем таблицу снова для следующих двух символов (B и E).
Продолжаем пока все "дерево" не сформировано, т.е. пока все не
сведется к одному узлу.
47. Алгоритмы обратимых методов.
Алгоритм Хаффмана.
Когда дерево создано, можно кодировать файл.
Всегда начинают из корня (Root). Кодируя первый символ (лист
дерева С), прослеживаем вверх по дереву все повороты ветвей и
если мы делаем левый поворот, то запоминаем 0-й бит, и аналогично
1-й бит для правого поворота. В результате получим:
C = 00 ( 2 бита )
A = 0100 ( 4 бита )
D = 0101 ( 4 бита )
F = 011 ( 3 бита )
B = 10 ( 2 бита )
E = 11 ( 2 бита )
При кодировании заменяем символы на данные последовательности.
48. Алгоритмы обратимых методов.
Алгоритм Хаффмана.
Первоначальный размер файла : 100 байт - 800 бит;
Размер сжатого файла : 30 байт - 240 бит;
240 - 30% из 800 , так что сжали этот файл на 70%.
Частота первоначально уплотненные
биты
уменьшено на
C 30
A 10
D 5
F 10
B 20
E 25
30 x 8 = 240
10 x 8 = 80
5 x 8 = 40
10 x 8 = 80
20 x 8 = 160
25 x 8 = 200
30 x 2 = 60
10 x 3 = 30
5 x 4 = 20
10 x 4 = 40
20 x 2 = 40
25 x 2 = 50
180
50
20
40
120
150
49. Алгоритмы обратимых методов.
Алгоритм Хаффмана.
Характеристики классического алгоритма Хаффмана:
Коэффициенты компрессии (Лучший, средний, худший
коэффициенты): 8; 1,5; 1.
Класс изображений: Практически не применяется к
изображениям в чистом виде. Обычно используется как один из
этапов компрессии в более сложных схемах.
Характерные особенности: Единственный алгоритм, который не
увеличивает размера исходных данных в худшем случае (если
не считать необходимости хранить таблицу перекодировки
вместе с файлом).
50. Синтетические алгоритмы.
Рассмотренные выше алгоритмы в «чистом виде» на практике не
применяют из-за того, что эффективность каждого из них сильно
зависит от начальных условий. В связи с этим, современные
средства архивации данных используют более сложные алгоритмы,
основанные на комбинации нескольких теоретических методов.
Общим принципом в работе таких «синтетических» алгоритмов
является предварительный просмотр и анализ исходных данных для
индивидуальной настройки алгоритма, на особенности
обрабатываемого материала.