Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Коды без памяти и алгоритм Хаффмена

Лекция 8. Коды без памяти, коды с памятью и арифметическое кодирование

Простейшими кодами, на основе которых может выполняться сжатие данных, являются коды без памяти. В коде без памяти каждый символ в кодируемом векторе данных заменяется кодовым словом из префиксного множества двоичных последовательностей или слов.

Префиксным множеством двоичных последовательностей S называется конечное множество двоичных последовательностей, таких, что ни одна последовательность в этом множестве не является префиксом, или началом, никакой другой последовательности в S.

Например, множество двоичных слов S1 = {00, 01, 100, 110, 1010, 1011 } является префиксным множеством двоичных последовательностей, поскольку, если проверить любую из 30 возможных комбинаций (wi wj) из S1, то видно, что wi никогда не явится префиксом (или началом) wj. С другой стороны, множество S2 = { 00, 001, 1110 } не является префиксным множеством двоичных последовательностей, так как последовательность 00 является префиксом (началом) другой последовательности из этого множества - 001.

Таким образом, если необходимо закодировать некоторый вектор данных X = ( x1, x2,… xn) с алфавитом данных A размера k, то кодирование кодом без памяти осуществляется следующим образом:

Ø составляют полный список символов a1, a2, aj...,ak алфавита A, в котором первым в списке будет стоять наиболее часто встречающийся в алфавите символ, вторым – реже встречающийся и т.д.;

Ø каждому символу aj назначают кодовое слово wj из префиксного множества двоичных последовательностей S;

Ø выход кодера получают объединением в одну последовательность всех полученных двоичных слов.

Если S = { w1, w2,..., wk } - префиксное множество, то можно определить некоторый вектор v(S) = (L1, L2,..., Lk), состоящий из чисел, являющихся длинами соответствующих префиксных последовательностей (Li - длина wi).

Вектор (L1, L2,..., Lk), состоящий из неуменьшающихся положительных целых чисел, называется вектором Крафта. Для него справедливо неравенство

. (1)

(неравенство Крафта). Справедливо следующее утверждение: если S - какое-либо префиксное множество, то v(S) - вектор Крафта.

Иными словами, длины двоичных последовательностей в префиксном множестве удовлетворяют неравенству Крафта.

Примеры простейших префиксных множеств и соответствующие им векторы Крафта:

S1 = {0, 10, 11} и v(S1) = (1, 2, 2);

S2 = {0, 10, 110, 111} и v(S2) = (1, 2, 3, 3);

S3 = {0, 10, 110, 1110, 1111} и v(S3) = (1, 2, 3, 4, 4);

S4 = {0, 10, 1100, 1101, 1110, 1111} и v(S4) = (1, 2, 4, 4, 4, 4);

Допустим мы хотим разработать код без памяти для сжатия вектора данных X = (x1, x2,… xn) с алфавитом A размером в k символов. Введем в рассмотрение так называемый вектор частот F = (F1, F2,..., Fk), где Fi - количество появлений i -го наиболее часто встречающегося символа из A в X. Закодируем X кодом без памяти, для которого вектор Крафта L = (L1, L2,..., Lk).

Тогда длина двоичной кодовой последовательности B(X) на выходе кодера составит

L*F = L1*F1 + L2*F2 +... + Lk*Fk. (2)

Лучшим кодом без памяти был бы код, для которого длина B(X) - минимальна. Для разработки такого кода нужно найти вектор Крафта L, для которого произведение L*F было бы минимально.

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

<== предыдущая лекция | следующая лекция ==>
Сжатие с потерей информации | Алгоритм Хаффмена
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 604; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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