Код Шеннона
Версия от 19:32, 7 января 2015; Nikita (обсуждение | вклад) (Новая страница: «'''''Код Шеннона''''' — алгоритм префиксного кодирования алфавита, предложенный Клодом Шен...»)
Код Шеннона — алгоритм префиксного кодирования алфавита, предложенный Клодом Шенноном, в котором используется избыточность сообщения, заключённая в неоднородном распределении частот символов первичного алфавита, то есть заменяет коды более частых символов короткими последовательностями, а коды более редких символов — более длинными последовательностями.
Вход:
— алфавит из n различных символов, — соответствующий ему набор положительных целых весов.Выход:
— набор кодовых слов, соответствующий входным данным.Содержание
Определение
Определение: |
Пусть 1. не является префиксом для , при2. называется кодом Шеннона. представляет собой коэффициентов двоичного разложения дроби | — алфавит из различных символов, — соответствующий ему набор положительных целых весов, , . Тогда набор бинарных кодов , такой, что:
Алгоритм построения бинарного кода Шеннона
- Сортируем элементы алфавита по не возрастанию весов.
- Элементу ставим в соответствие число , при этом .
- Представляем каждое число , где , в виде двоичной дроби.
- В качестве кодового слова для используем первые коэффициентов представления дроби . ( — наименьшее целое число, не меньшее )
Пример
Для примера возьмём алфавит
, а набор весов :Символ | a | b | c | d | e |
---|---|---|---|---|---|
Вес | 5 | 2 | 6 | 1 | 2 |
По алгоритму сортируем элементы алфавита по не возрастанию весов:
Символ | c | a | b | e | d |
---|---|---|---|---|---|
Вес | 6 | 5 | 2 | 2 | 1 |
Каждому символу
сопоставляем :Символ | c | a | b | e | d |
---|---|---|---|---|---|
Вес | 6 | 5 | 2 | 2 | 1 |
0 | 6 | 11 | 13 | 15 |
Посчитаем
и переведём в двоичную систему счисления:Символ | c | a | b | e | d |
---|---|---|---|---|---|
Символ | c | a | b | e | d |
---|---|---|---|---|---|
0.0000 | 0.0110 | 0.1011 | 0.1101 | 0.1111 |
Посчитаем
и запишем коды:Символ | c | a | b | e | d |
---|---|---|---|---|---|
2 | 2 | 3 | 3 | 4 | |
Код | 00 | 01 | 101 | 110 | 1111 |
Декодирование
Для декодирования необходимо последовательно вычислять первые
цифр двоичной дроби и сравнивать их с первыми символами последовательности кодовых слов. Их совпадение определяет символ .Литература
- Ю. М. Штарьков, “Обобщенные коды Шеннона”, Пробл. передачи информ., 20:3 (1984), 3—16 — с. 4.