русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Алгоритм Хаффмана


Дата добавления: 2015-07-23; просмотров: 1002; Нарушение авторских прав


 

Кодирование Хаффмана является простым алгоритмом для построения кодов переменной длины, имеющих минимальную среднюю длину. Этот весьма популярный алгоритм служит основой многих компьютерных программ сжатия текстовой и графической информации. Некоторые из них используют непосредственно алгоритм Хаффмана, а другие берут его в качестве одной из ступеней многоуровневого процесса сжатия. Метод Хаффмана производит идеальное сжатие (то есть, сжимает данные до их энтропии) если вероятности символов точно равны отрицательным степеням числа 2[6].

Применительно к задаче сжатия изображений алгоритм начинается составлением списка значений пикселов (яркости или цветности) в порядке убывания их вероятностей. Затем от корня строится дерево, листьями которого служат эти значения пикселов. Это делается по шагам, причем на каждом шаге выбираются два значения с наименьшими вероятностями, добавляются наверх частичного дерева, удаляются из списка и заменяются вспомогательным новым значением, представляющим эти два значения пикселов. Вспомогательному значению приписывается вероятность, равная сумме вероятностей, выбранных на этом шаге значений пикселов. Когда список сокращается до одного вспомогательного значения, представляющего все используемые значения пикселов, дерево объявляется построенным. Завершается алгоритм спуском по дереву и построением кодов всех значений пикселов.

 

Пример:

Пусть имеются пять отсчетов сигнала яркости с вероятностями, заданными на рис.

Отсчеты объединяются в пары в следующем порядке:

1. а4 объединяется с а5, и оба заменяются комбинированным значением а45 с вероятностью 0.2;

2. осталось четыре символа, a1с вероятностью 0.4, а также а2, а3 и а45 с вероятностями по 0.2. Произвольно выбираем а3 и а45, объединяем их и заменяем вспомогательным символом а345 свероятностью 0.4;



3. теперь имеется три символа a1, а2 и а345 с вероятностями 0.4, 0.2 и 0.4, соответственно. Выбираем и объединяем символы а2 и а345 во вспомогательный символ а2345 с вероятностью 0.6;

4. наконец, объединяем два оставшихся символа а1и а2345 и заменяем на а12345 с вероятностью 1.

Дерево построено. Оно изображено на рис. а , «лежа на боку», с корнем справа и пятью листьями слева. Для назначения кодов мы произвольно приписываем бит 1 верхней ветке и бит 0 нижней ветке дерева для каждой пары. В результате получаем следующие коды: 0, 10, 111, 1101 и 1100. Распределение битов по краям - произвольное.

Средняя длина этого кода равна 0.4 х 1 + 0.2 x 2 + 0.2 x 3 + 0.1 x 44 + 0.1 х 4 = 2.2 бит/символ. Очень важно то, что кодов Хаффмана бывает много. Некоторые шаги алгоритма выбирались произвольным образом, поскольку было больше символов с минимальной вероятностью. На рис. b показано, как можно объединить символы по-другому и получить иной код Хаффмана (11, 01, 00, 101 и 100). Средняя длина равна 0.4 х 2 + 0.2 х 2 4- 0.2 х 2 + 0.1 х 3 4- 0.1 х 3 = 2.2 бит/символ как и у предыдущего кода.

Алгоритм в лучшем случае сжимает информацию в 8 раз, в худшем случае коэффициент сжатия – 1. При кодировании требует в два раза больше времени, чем для декодирования. Но нужно помнить, что требуется также сохранять и таблицу перекодировки. Входит в состав всех известных архиваторов. Для сжатия изображения и видео как составная часть используется в таких известных алгоритмах, как JPEG, MPEG, Wavelet и др.

 



<== предыдущая лекция | следующая лекция ==>
Алгоритм сжатия RLE | Арифметическое сжатие


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.