Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Teoria_informatsii_Gordeev_5sem.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
758.94 Кб
Скачать
  1. Алгоритмы кодирования

    1. Алгоритм Шеннона (Фано).

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

Каждый шаг – это горизонтальное деление пополам этой последовательности, а i-й шаг – деление одной из выбранных на предыдущем этапе частей.

Рассмотрим частный случай бинарного алфавита. В этой ситуации деление происходит на две части, а в общем случае – на q частей.

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

Затем каждое деление порождает символ алфавита B, который приписывается при каждом делении к коду верхней части добавляется 0, а нижней – 1.

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

Пример.

Нужно передавать семь букв. Их вероятности заданы. Схема алгоритма приведена ниже.

Т аким образом:

a1 00

a2 01

a3 100

a4 101

a5 110

a6 1110

a7 1111

Стоимость кодирования 2,625. Энтропия:

H = 1/4 log 4 + 1/4 log 4 + 1/8 log 8 + 1/8 log 8 + 1/8 log 8 + 2 * 1/16 log 16 = 2, 25

Пример.

Стоимость кодирования 2,28.

H = 7/18 log 18/7 + 1/2 log 6 + 1/5 log 9 = 2,17

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

Алгоритм дает результат не хуже, чем метод Шеннон-Фано. Более того, можно показать, что стоимость кодирования этим алгоритмом равна C(A).

Для случая двоичного кодирования код строится при помощи бинарного корневного дерева. (В случае произвольного q используется q-арное дерево). Из каждой вершины выходит два ребра: правое помечаем 1, левое – 0. Листья такого дерева кодируются последовательностью пометок от корня к листу. Очевидно, что множество соответствующих этим листьям слов образует префиксный код.

Вначале мы строим вершины дерева (листья), соответствующие передаваемым буквам. Они помечаются значениями вероятностей. Затем на каждом шаге берутся две вершины с наименьшими пометками. Они образуют родительский узел, пометка которого равна сумме пометок вершин, и исключаются из дальнейшего рассмотрения. Шаги продолжаются до появления корня.

Пример.

Рассмотрим тот же пример, что и для кода Шеннона-Фано.

a 1 1/4

a2 1/4

a3 1/8

a4 1/8

a5 1/8

a6 1/16

a7 1/16

Итерации о построение листьев бинарного дерева.

(1, 2, 3, 4, 5, 6, 7) → (1, 2, 3, 4, 5, (6, 7)) → (1, 2, (3, 4), 5, (6, 7)) → (1, 2, (3, 4), (5, 6, 7)) → ((1, 2), (3, 4), (5, 6, 7)) → ((1, 2), (3, 4, 5, 6, 7))

Т

7

еперь, начиная с корня, строим пометки ребер дерева:

(6,7)

6

(5,6,7)

(3,4)

5

(3,4,5,6,7)

1

4

0

2

(1,2)

1

3

Получаем код.

и код:

1 00

2 01

3 100

4 101

5 110

6 1110

7 1111

Стоимость кодирования 2,625.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]