Вы находитесь на странице: 1из 21

«Сжатие данных.

Алгоритм Хаффмана»
Способы уменьшения объема
информации:
1 Ограничение количества информации

2 Увеличение объема носителей

3 Использование сжатия информации


Цели и задачи проекта:
Узнать, когда и как появились
алгоритмы сжатия.
Рассмотреть основные виды
алгоритмов сжатия.
Изучить алгоритм Хаффмана и
показать его применение.
Научиться решать задачи по
данному алгоритму.
История появления алгоритмов
сжатия.
Клод Шеннон – основоположник
науки о сжатии информации.
Его теорема об оптимальном
кодировании показывает, к чему
нужно стремиться при
кодировании информации и на
сколько та или иная
информация при этом
сожмется.
1977 год – изобретение Лемпелем
и Зивом словарных алгоритмов.
1984 год – изобретение алгоритма
PPM и LZV.
Теоретические способы уменьшения
данных:
• Изменение содержимого данных
• Изменение структуры данных
• Одновременное
изменение как
содержимого,
так и структуры данных
Методы сжатия с
регулированными потерями
информации.
Если при сжатии данных происходит изменение
их содержимого, то метод сжатия называется
необратимым, то есть при восстановлении
(разархивировании) данных из архива не
происходит полное восстановление информации.

Примеры форматов сжатия с потерями:


• JPEG - для графических данных;
• MPG - для для видеоданных;
• MP3 - для аудиоданных.
• Если при сжатии данных происходит
только изменение структуры данных, то
метод сжатия называется обратимым. В
этом случае, из архива можно
восстановить информацию полностью.

Примеры форматов сжатия без


потерь информации:
• •GIF, TIFF - для графических
данных;
• AVI - для видеоданных;
• ZIP, ARJ, RAR, CAB, LH - для
произвольных типов данных.
алгоритмы
алгоритм RLE группы KWE
(KeyWord Encoding) алгоритм
(Run
Хаффмана
Length Encoding)

Сжатие данных
Алгоритм Хаффмана
Дэвид Хаффман — первопроходец
в сфере теории информации.

В 1952 году создал алгоритм


префиксного кодирования с
минимальной избыточностью
(известный как алгоритм или код
Хаффмана).

В 1999 году получил медаль


Ричарда Хэмминга за
исключительный вклад в теорию
информации.
Определение.
Пусть A = {a1, a2, …, an} — алфавит из n
различных символов,
W = {w1, w2, …, wn} — соответствующий ему
набор положительных целых весов.
Тогда набор бинарных кодов C = {c1, c2, …, cn},
такой, что:
1. ci не является префиксом для cj, при i ≠ j.
2. Сумма минимальна.

( |ci| — длина кода ci)


называется кодом Хаффмана.
Характеристики классического
алгоритма Хаффмана:
Коэффициенты компрессии: 8, 1,5, 1 (Лучший,
средний, худший коэффициенты).

Класс изображений: Практически не применяется к


изображениям в чистом виде. Обычно используется
как один из этапов компрессии в более сложных
схемах.

Симметричность: 2 (за счет того, что требует двух


проходов по массиву сжимаемых данных).

Характерные особенности: Единственный алгоритм,


который не увеличивает размера исходных данных в
худшем случае (если не считать необходимости
хранить таблицу перекодировки вместе с файлом).
Алгоритм.
• 1. Составим список кодируемых символов, при этом будем
рассматривать один символ как дерево, состоящее из
одного элемента, весом, равным частоте появления
символа в тексте.

• 2. Из списка выберем два узла с наименьшим весом.

• 3. Сформируем новый узел с весом, равным сумме весов


выбранных узлов, и присоединим к нему два выбранных
узла в качестве дочерних.

• 4. Добавим к списку только что сформированный узел.

• 5. Если в списке больше одного узла, то повторить пункты


Пример 1.
Для примера возьмём слово "Миссисипи". Тогда алфавит
будет А={и, м, п, с} , а набор весов W={4, 1, 1, 3}:

Узел и м п с

Вес 4 1 1 3

По алгоритму возьмем два символа с наименьшей частотой -


это м и п. Сформируем из них новый узел мп весом 2 и
добавим его к списку узлов:
Узел и мп с

Вес 4 2 3

Затем объединим в один узел узлы мп и c:


Узел и мпс

Вес 4 5
И, наконец, объединяем два узла и и мпс.
Итак, мы получили дерево Хаффмана и соответствующую ему таблицу
кодов:
Символ и м п с
Код 0 100 101 11

Таким образом, закодированное слово "Миссисипи" будет выглядеть как


"1000111101101010". Длина закодированного слова - 16 бит. Стоит
заметить, что если бы мы использовали для кодирования каждого
символа из четырёх по 2 бита, длина закодированного слова составила
бы 18 бит.
Пример 2.
Предположим, что нам надо заархивировать
следующую символьную последовательность:

"AAABCCD".
Без архивации эта последовательность занимает 7
байт. С архивацией по методу RLE она бы
выглядела бы так:
3,"A",1,"B",2,"C",1,"D"
то есть возросла бы до 8-ми байтов.
А алгоритм Хаффмана может сократить ее почти до
двух байтов, и вот как это происходит.
Таблица частот:
Символ 'A','B','C,'D'
Количество повторений '3','1','2','3'

Двоичное дерево:
Рассмотренный нами выше
текст "AAABCCD" займет
0 0 0 111 111 10 10 110
всего 13 бит (а это меньше
A A A B B C C D двух байтов).

A
AAAAA B
B C C C C DD
0
0000
0 111
111 10
10 10
10 110
110
Пример 3.
Рассмотрим использование алгоритма Хаффмана на пример оптимизации занимаемого пространства БД при хранении
массива, состоящего из целых чисел в диапазоне [0,255]. Массив представляет собой отображение звуковой
информации wav-файла. Среднее количество хранимых элементов массива составляет ~20 000.
Результаты представления массива после различных преобразований массива $data с 9288 элементами (в символах):
Список используемой литературы:

• Веретенников А.Б «Алгоритм


Хаффмана», 2008 г.
• Материалы для подготовки к ЕГЭ.
• Ресурсы Интернет.

Вам также может понравиться