русс | укр

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

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

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

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


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

Метод Хаффмана


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


Шаг 1. Упорядочиваем символы исходного алфавита в порядке невозрастания их вероятностей. (Записываем их в столбец.)

Шаг 2. Объединяем два символа с наименьшими вероятностями. Символу с большей вероятностью приписываем "1", символу с меньшей – "0" в качестве элементов их кодов.

Шаг 3. Считаем объединение символов за один символ с вероятностью, равной сумме вероятностей объединенных символов.

Шаг 4. Возвращаемся на Шаг 2 до тех пор, пока все символы не будут объединены в один с вероятностью, равной единице.

Закодируем тот же 6-буквенный алфавит методом Хаффмана, изобразив соответствующее двоичное дерево (рис. 4.2).

Рис. 4.2. Двоичное дерево, соответствующее кодированию по методу Хаффмана

Считывание кода идет от корня двоичного дерева к его вершинам с обозначением символов. Это обеспечивает префиксность кода. Метод Хаффмана также содержит неоднозначность, поскольку в алфавите могут оказаться несколько символов с одинаковой вероятностью, и код будет зависеть от того, какие символы мы будем объединять в первую очередь. Мы видим, что код Шеннона – Фано и код Хаффмана для заданного алфавита отличаются. На вопрос, какой из них лучше, даст ответ проверка на оптимальность.

Описанные методы легко применить не только для двоичного кодирования, но и для кодирования алфавитом, содержащим произвольное число символов . В этом случае в методе Шеннона – Фано идет разбиение последовательности символов на равновероятных групп, в методе Хаффмана – объединение в группы по символов.

Проверка кода на оптимальность.Для оценивания оптимальности кода используют разные критерии. Основным показателем является коэффициент относительной оптимальности , вычисляемый по формуле

 

. (4.1)

Из теоремы кодирования следует, что эта величина не превышает единицы. И чем меньше она отличается от единицы, тем более эффективным считается код.



Следующая характеристика оптимальности кода обусловлена оценкой распределения символов кодового алфавита: код тем ближе к оптимальному, чем меньше различаются вероятности появления различных символов кодового алфавита в закодированном сообщении. Среднее число появлений -го ( j = 1, …, M ) символа кодового алфавита можно оценить по формуле

,

где N – объем исходного алфавита;

mij – число bj - х символов в коде ai -го символа исходного алфавита;

pi – вероятность появления ai -го символа.

Рассмотрим эти оценки оптимальности применительно к двоичному кодированию, как наиболее распространенному. Признаки оптимальности двоичного кода вытекают из предыдущих формул при условии, что кодовый алфавит равновероятен, т.е. H(B) = 1.

Признак 1. Средняя длина кодового слова должна быть приблизительно равна энтропии кодируемого алфавита:

. (4.2)

 

Признак 2. Среднее число нулей и единиц в кодовой последовательности должно быть приблизительно одинаково:

, (4.3)

где

, .

Здесь – число нулей в коде -го символа;

– число единиц в коде -го символа;

– вероятность -го символа;

– число символов в исходном алфавите.

Термин "приблизительно" условимся понимать как с точностью до 10%.

Выполним проверку на оптимальность двоичного кода, полученного методом Шеннона – Фано для алфавита A = {a1, a2, a3, a4, a5,a6} с вероятностями появления отдельных символов (0,25 – 0,3 – 0,15 – 0,2 – 0,05 – 0,05) соответственно. Для удобства занесем все необходимые данные в таблицу, расположив в ней символы в порядке невозрастания вероятностей.

ai pi Код li n 0i n 1i
a2 0,3 0 0
a1 0,25 0 1
a4 0,2 1 0
a3 0,15 1 1 0
a5 0,05 1 1 1 0
a6 0,05 1 1 1 1

Итак, в соответствии с первым признаком: ,

симв.

симв.

Второй признак, к сожалению, выполняется хуже.

Блочное кодирование.В отличие от побуквенного, блочное кодирование формирует коды для буквосочетаний, составленных из m символов исходного алфавита. Буквосочетания можно рассматривать как новый, расширенный алфавит объемом , где N – объем исходного алфавита; m – число символов в буквосочетании.

Блочное кодирование применяется к алфавитам, в которых вероятность появления одной какой-то буквы значительно превышает вероятность появления других букв. Например, алфавит {a, b, c} с вероятностями pa = 0,7; pb = 0,2; pc = 0,1. Методы побуквенного кодирования здесь не будут эффективными, так как невозможно обеспечить разбиение алфавита на равновероятные подгруппы, равно как и объединение равноценных групп элементов. Расширенный алфавит имеет более сглаженную разницу в вероятностях буквосочетаний, что и позволяет добиться большей оптимальности при его кодировании.

Из теории вероятностей известно, что если буквы появляются независимо одна от другой, то вероятность появления некоторой последовательности букв равна произведению вероятностей входящих в нее букв. Исходя из этого, рассчитываем вероятности для буквосочетаний и кодируем их одним из методов побуквенного оптимального кодирования (т. е. методом Шеннона – Фано или методом Хаффмана).

Рассмотрим это для приведенного выше алфавита и убедимся в большей эффективности блочного кодирования в подобных ситуациях.

Буква pi Код li pili
a 0,7 0,7
b 0,2 1 0 0,4
c 0,1 1 1 0,2

Энтропия данного алфавита равна

;

средняя длина кодового слова ;

избыточность кода

Теперь составим таблицу сочетаний из 2 букв.

Сочетание pi Код Ш – Ф li pili
aa 0,49 0,49
ab 0,14 0,42
ba 0,14 0,42
ac 0,07 0,28
ca 0,07 0,28
bb 0,04 0,16
bc 0,02 0,10
cb 0,02 0,12
cc 0,01 0,06

Получим:

2,33 дв. симв.,

1,165 дв. симв.

Отсюда

1,165 1.157 = 0,008 дв. симв.

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

Действуя аналогично, можно закодировать алфавит блоками по 3 и по 4 символа. Это позволит еще больше оптимизировать код, приближая среднюю длину кодового слова к энтропии алфавита, как и утверждает теорема кодирования. Однако практика показывает, что с увеличением числа символов в блоке больше четырех, сложность кодирующего устройства растет быстрее, чем оптимальность кода. Поэтому применение слишком длинных блоков нецелесообразно.

Единая система кодирование текстовой информации.Ознакомившись с теоретическими основами кодирования, можно перейти к рассмотрению способов кодирования текстовых данных, применяющихся на практике для обмена информацией в компьютерных системах.

Естественные человеческие языки сами есть не что иное, как системы кодирования понятий для выражения мыслей посредством речи. Несмотря на разнообразие природных языков общие подходы к кодированию сообщений одинаковы. Учитывая потребности обмена информацией, постоянно велась работа по созданию единых стандартов кодирования текстовых данных. Поскольку английский язык стал средством международного общения, для него была разработана и введена в действие система кодирования ASCII ( American Standard Code for Information Interchange - стандартный код информационного обмена США). В системе ASCII закреплены две таблицы кодирования – базовая и расширенная. Базовая закрепляет значения кодов от 0 до 127, а расширенная от 128 до 255. Коды являются двоичными, равномерными, восьмиразрядными. Первые 32 кода, начиная с нулевого, являются управляющими, они предоставлены производителям вычислительной техники. С 32 по 127 коды заняты символами английского языка, цифрами, знаками препинания, обозначениями арифметических функций и вспомогательных символов. Коды, начиная со 128 отведены под национальные алфавиты. Кодировка символов русского языка, известная как Windows 1251, была введена компанией Microsoft и закрепилась благодаря широкому распространению продукции этой компании в России. Базовая таблица ASCII приведена в таблице 4.1, расширенная таблица Windows 1251 приведена в таблице 4.2.

Таблица 4.1

Базовая таблица кодировки ASCII

Таблица 4.2

Кодировка Windows 1251

Мы видим, что каждому символу в таблицах 4.1 и 4.2 поставлены в соответствие номера; 8-разрядный двоичный код номера и будет являться кодом символа. Так, символу А соответстует номер 65. Значит, код А будет представлть собой последовательность 01000001.

Аналогичные системы кодирования были разработаны в свое время и в Советском Союзе, это КОИ-7 (код обмена информацией 7-разрядный) и КОИ-8. Сегодня кодировка КОИ-8 (восьмиразрядный код) широко используется на территории России и в российском секторе Internet .

Трудности всемирного использования системы ASCII заключаются в недостаточности 8-разрядных кодов для всего множества национальных алфавитов. Однако в настоящее время технические средства достигли такого уровня, что позволяют использовать 16-разрядные коды, которыми можно закодировать алфавит объемом 65 536 символов. Этого поля достаточно для размещения в одной таблице символов большинства языков планеты. Система, основанная на 16-разрядном кодировании символов, получила название универсальной – UNICODE . Сегодня происходит постепенный перевод документов и программных средств на универсальную систему кодирования.

 



<== предыдущая лекция | следующая лекция ==>
Метод Шеннона – Фано | Системы счисления


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


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

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

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


 


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

 
 

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

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