Download - «Сжатие данных. Алгоритм Хаффмана»
![Page 1: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/1.jpg)
Выполнила: Медведева Анастасия,
Ученица 11А класса,МОУ СОШ №3.Руководитель:
ГлазуноваОльга Петровна,
учитель информатики.
«Сжатие данных. Алгоритм
Хаффмана»
![Page 2: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/2.jpg)
Способы уменьшения объема информации:Способы уменьшения объема информации:
1
2
3
Ограничение количества информации
Ограничение количества информации
Увеличение объема носителейУвеличение объема носителей
Использование сжатия информации
Использование сжатия информации
![Page 3: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/3.jpg)
Цели и задачи проекта:
Узнать, когда и как появились алгоритмы сжатия.
Рассмотреть основные виды алгоритмов сжатия.
Изучить алгоритм Хаффмана и показать его применение.
Научиться решать задачи по данному алгоритму.
![Page 4: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/4.jpg)
История появления алгоритмов сжатия.
Клод ШеннонКлод Шеннон – основоположник науки о
сжатии информации.Его теорема об оптимальном кодировании показывает, к чему нужно стремиться при кодировании информации и
на сколько та или иная информация при этом
сожмется.
![Page 5: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/5.jpg)
1977 год1977 год – изобретение Лемпелем и Зивом
словарных алгоритмов.1984 год1984 год – изобретение
алгоритма PPM и LZV.
![Page 6: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/6.jpg)
Теоретические способы Теоретические способы уменьшения данных:уменьшения данных:
• Изменение содержимого данных
• Изменение структуры данных• Одновременное
изменение как содержимого,
так и структуры данных
![Page 7: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/7.jpg)
Если при сжатии данных происходит изменение их содержимого, то метод
сжатия называется необратимым, то есть при восстановлении (разархивировании) данных из архива не происходит полное
восстановление информации.
Примеры форматов сжатия с потерями:• JPEG - для графических данных;
• MPG - для для видеоданных;• MP3 - для аудиоданных.
Методы сжатия с Методы сжатия с регулированными регулированными
потерями информации.потерями информации.
![Page 8: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/8.jpg)
• Если при сжатии данных происходит только изменение структуры данных, то метод сжатия называется обратимым. В этом случае, из архива можно восстановить информацию полностью.Примеры форматов сжатия без потерь информации:
• •GIF, TIFF - для графических данных;
• AVI - для видеоданных;• ZIP, ARJ, RAR, CAB, LH - для произвольных типов данных.
![Page 9: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/9.jpg)
Сжатие данных
алгоритм RLE
(Run Length
Encoding)
алгоритмы группы KWE
(KeyWord Encoding) алгоритм Хаффмана
![Page 10: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/10.jpg)
Алгоритм Хаффмана
Дэвид Хаффман — первопроходец в сфере
теории информации.
В 1952 году создал алгоритм префиксного кодирования с минимальной избыточностью (известный как алгоритм или
код Хаффмана).
В 1999 году получил медаль Ричарда Хэмминга за
исключительный вклад в теорию информации.
![Page 11: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/11.jpg)
Определение.Определение.
Пусть A = {a1, a2, …, an} — алфавит из n различных символов,
W = {w1, w2, …, wn} — соответствующий ему набор положительных целых весов.
Тогда набор бинарных кодов C = {c1, c2, …, cn}, такой, что:
1. ci не является префиксом для cj, при i ≠ j. 2. Сумма минимальна.
( |ci| — длина кода ci) называется кодом Хаффмана.
![Page 12: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/12.jpg)
Характеристики Характеристики классического классического
алгоритма Хаффмана:алгоритма Хаффмана: Коэффициенты компрессии:Коэффициенты компрессии: 8, 1,5, 1 (Лучший, средний, худший коэффициенты).
Класс изображений:Класс изображений: Практически не
применяется к изображениям в чистом виде. Обычно используется как один из этапов
компрессии в более сложных схемах.
Симметричность:Симметричность: 2 (за счет того, что требует двух проходов по массиву сжимаемых данных).
Характерные особенности:Характерные особенности: Единственный алгоритм, который не увеличивает размера исходных данных в худшем случае (если не
считать необходимости хранить таблицу перекодировки вместе с файлом).
![Page 13: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/13.jpg)
Алгоритм.• 1. Составим список кодируемых символов, при этом
будем рассматривать один символ как дерево, состоящее из одного элемента, весом, равным частоте появления символа в тексте.
• 2. Из списка выберем два узла с наименьшим весом.
• 3. Сформируем новый узел с весом, равным сумме весов выбранных узлов, и присоединим к нему два выбранных узла в качестве дочерних.
• 4. Добавим к списку только что сформированный узел.
• 5. Если в списке больше одного узла, то повторить пункты со второго по пятый.
![Page 14: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/14.jpg)
![Page 15: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/15.jpg)
Пример 1. Для примера возьмём слово "Миссисипи". Тогда
алфавит будет А={и, м, п, с} , а набор весов W={4, 1, 1, 3}:
По алгоритму возьмем два символа с наименьшей частотой - это м и п. Сформируем из них новый узел мп весом 2 и добавим его к
списку узлов:
Затем объединим в один узел узлы мп и c:
Узел и м п с
Вес 4 1 1 3
Узел и мп с
Вес 4 2 3
Узел и мпс
Вес 4 5
![Page 16: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/16.jpg)
И, наконец, объединяем два узла и и мпс. Итак, мы получили дерево Хаффмана и соответствующую
ему таблицу кодов:
Таким образом, закодированное слово "Миссисипи" будет выглядеть как "1000111101101010". Длина
закодированного слова - 16 бит. Стоит заметить, что если бы мы использовали для кодирования каждого символа
из четырёх по 2 бита, длина закодированного слова составила бы 18 бит.
Символ и м п с
Код 0 100 101 11
![Page 17: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/17.jpg)
Пример 2.
Предположим, что нам надо заархивировать следующую
символьную последовательность:
"AAABCCD".Без архивации эта последовательность
занимает 7 байт. С архивацией по методу RLE она бы выглядела бы так:
3,"A",1,"B",2,"C",1,"D"то есть возросла бы до 8-ми байтов.
А алгоритм Хаффмана может сократить ее почти до двух байтов, и вот как это
происходит.
![Page 18: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/18.jpg)
Таблица частот:Таблица частот:
Двоичное дерево:Двоичное дерево:
Символ 'A','B','C,'D'Количество повторений
'3','1','2','3'
![Page 19: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/19.jpg)
0 0 0 111 111 10 10 110
A A A B B C C D
Рассмотренный нами выше текст "AAABCCD" займет всего 13 бит (а
это меньше двух байтов).
A A A B C C D0 0 0 111 10 10 110 A A A B C C D
0 0 0 111 10 10 110
![Page 20: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/20.jpg)
Пример 3.Рассмотрим использование алгоритма Хаффмана на
пример оптимизации занимаемого пространства БД при хранении массива, состоящего из целых чисел в
диапазоне [0,255]. Массив представляет собой отображение звуковой информации wav-файла.
Среднее количество хранимых элементов массива составляет ~20 000.
Результаты представления массива после различных преобразований массива $data с 9288 элементами (в
символах):
![Page 21: «Сжатие данных. Алгоритм Хаффмана»](https://reader035.vdocuments.site/reader035/viewer/2022062221/56813638550346895d9db3c6/html5/thumbnails/21.jpg)
Список используемой литературы:
• Веретенников А.Б «Алгоритм Хаффмана», 2008 г.
• Материалы для подготовки к ЕГЭ.
• Ресурсы Интернет.