КАТЕГОРИИ: Архитектура-(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) |
Реалізація коду Хафмена
Хай є джерело даних, яке передає символи Наша задача – підібрати такі кодові символи Хафмен запропонував будувати дерево, в якому вузли з найменшою імовірністю якнайдальше віддалені від кореня. Звідси і витікає алгоритм побудови дерева чи алгоритм кодування: 1. Вибрати два символи 2. Звести гілки дерева від цих двох елементів в одну точку з імовірністю 3. Повторити пункт 1 з урахуванням нової точки замість Приклад. Тепер спробуємо скористатися одержаною теорією і закодувати інформацію, передану джерелом, на прикладі семи символів. Розберемо детально перший цикл. На малюнку зображена таблиця, в якій кожному символу Згідно пункту 1 ми вибираємо два символи з таблиці з якнайменшою імовірністю. У нашому випадку це
Після багатократного повторення висловлених дій будується наступне дерево:
По побудованому дереву можна визначити значення кодів
Тепер спробуємо закодувати послідовність з символів. Хай символу Для кодування можна використовувати таблицю кодових символів
В результаті кодування ми виграли 5 біт і записали послідовність 19 бітами замість 24.
Ентропію для нашого випадку:
Ентропія має чудову властивість: вона дорівнює мінімальній допустимій середній довжині кодового символу
Підставляючи значення у формули
Величини
Таким чином, ми одержали стиснення в співвідношенні 1:1,429, що дуже непогане. І наприкінці, вирішимо останню задачу: дешифровка послідовності бітів. Хай для нашої ситуації є послідовність бітів: 001101100001110001000111111. Необхідно визначити початковий код, тобто декодувати цю послідовність. Звичайно, в такій ситуації можна скористатися таблицею кодів, але це достатньо незручно, оскільки довжина кодових символів непостійна. Набагато зручніше здійснити спуск по дереву (починаючи з коріння) за наступним правилом: 1. Початкова точка – корінь дерева. 2. Прочитати новий біт. Якщо він нуль, то пройти по гілці, поміченій нулем, інакше - одиницею. 3. Якщо точка, в яку ми потрапили, кінцева, то ми визначили кодовий символ, який слідує записати і повернутися до пункту 1. Інакше слід повторити пункт 2. Розглянемо приклад декодування першого символу. Ми знаходимося в точці з імовірністю 1,00 (коріння дерева), прочитуємо перший біт послідовності і відправляємося по гілці, поміченій нулем, в точку з імовірністю 0,60. Оскільки ця точка не є кінцевою в дереві, то прочитуємо наступний біт, який теж рівний нулю, і відправляємося по гілці, поміченій нулем, в точку Таким чином декодована послідовність приймає вигляд.
В даному випадку виграш склав 6 біт при достатньо невеликій довжині послідовності.
Слід зазначити, що метод Хафмена застосовний для джерела повідомлень, що з’являються з будь-якою імовірністю, а не тільки з імовірністю цілого ступеня основи коду. Приклад 2. Задано ансамбль повідомлень:
Побудувати двійковий код Хафмена. Кодове дерево для даного коду представлене на рис. 2.
2. Кодове дерево для коду за прикладом 2
Дата добавления: 2014-01-04; Просмотров: 502; Нарушение авторских прав?; Мы поможем в написании вашей работы! |