Код Шеннона — различия между версиями
Nikita (обсуждение | вклад) (Новая страница: «'''''Код Шеннона''''' — алгоритм префиксного кодирования алфавита, предложенный Клодом Шен...») |
(нет различий)
|
Версия 19:32, 7 января 2015
Код Шеннона — алгоритм префиксного кодирования алфавита, предложенный Клодом Шенноном, в котором используется избыточность сообщения, заключённая в неоднородном распределении частот символов первичного алфавита, то есть заменяет коды более частых символов короткими последовательностями, а коды более редких символов — более длинными последовательностями.
Вход: — алфавит из 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.